Git development
 help / color / mirror / Atom feed
From: Phillip Wood <phillip.wood123@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Elijah Newren <newren@gmail.com>,
	Patrick Steinhardt <ps@pks.im>
Subject: Re: [PATCH v3 1/2] sequencer: factor out parsing of todo commands
Date: Tue, 23 Jun 2026 16:53:22 +0100	[thread overview]
Message-ID: <65d38915-019e-4e2c-838f-980023e0c2af@gmail.com> (raw)
In-Reply-To: <xmqqpl1i1pef.fsf@gitster.g>

On 22/06/2026 18:00, Junio C Hamano wrote:
> Phillip Wood <phillip.wood123@gmail.com> writes:
> 
>> From: Phillip Wood <phillip.wood@dunelm.org.uk>
>>
>> Move the code that parses todo commands into a separate function so
>> that it can be shared with "git status" in the next commit. As we
>> know the input is NUL terminated we do not pass a pointer to the end
>> of the line and instead test for a blank line by looking for NUL, CR
>> LF, or LF. We use starts_with() instead of starts_with_mem() for the
>> same reason. This results in slightly different behavior when there
>> a CR at the start of the line that is not followed by LF. Previously
>> such a line was treated as a comment rather than an invalid line.
> 
> Meaning that the input validation is tighter than before? 

Yes

> I think
> it is fine in this case, as I do not see a reason why anybody wants
> to use a lone CR as comment introducer.

Agreed. In the unlikely event that core.commentChar starts with a CR we 
still treat the line as a comment, but we don't treat lines starting 
with a CR as a comment anymore. I think that behavior was a lazy way of 
handling empty lines with CR LF line endings.

Thanks

Phillip
>> +bool sequencer_parse_todo_command(const char **p, enum todo_command *cmd)
>> +{
>> +	const char *s = *p;
>> +
>> +	for (int i = 0; i < TODO_COMMENT; i++)
>> +		if (is_command(i, p)) {
>> +			*cmd = i;
>> +			return true;
>> +		}
>> +
>> +	if (starts_with(s, comment_line_str)) {
>> +		*cmd = TODO_COMMENT;
>> +		return true;
>> +	} else if (s[0] == '\n' || (s[0] == '\r' && s[1] == '\n') || !s[0]) {
>> +		*cmd = TODO_COMMENT;
>> +		return true;
>> +	}
>> +
>> +	return false;
>>   }
> 
> I notice that the order of noticing concrete comments and comment
> lines are swapped relative to the original.  There is no inherently
> "natural" order between them, so the change is perfectly OK.  I just
> got confused slightly while reading it until I realized that is what
> you did.
> 
>>   static int check_label_or_ref_arg(enum todo_command command, const char *arg)
>> @@ -2716,29 +2737,23 @@ static int parse_insn_line(struct repository *r, struct replay_opts *opts,
>>   {
>>   	struct object_id commit_oid;
>>   	char *end_of_object_name;
>> -	int i, saved, status, padding;
>> +	int saved, status, padding;
>>   
>>   	item->flags = 0;
>>   
>>   	/* left-trim */
>>   	bol += strspn(bol, " \t");
>>   
>> -	if (bol == eol || *bol == '\r' || starts_with_mem(bol, eol - bol, comment_line_str)) {
>> -		item->command = TODO_COMMENT;
>> -		item->commit = NULL;
>> -		item->arg_offset = bol - buf;
>> -		item->arg_len = eol - bol;
>> -		return 0;
>> -	}
>> -
>> -	for (i = 0; i < TODO_COMMENT; i++)
>> -		if (is_command(i, &bol)) {
>> -			item->command = i;
>> -			break;
>> -		}
>> -	if (i >= TODO_COMMENT)
>> +	if (!sequencer_parse_todo_command(&bol, &item->command))
>>   		return error(_("invalid command '%.*s'"),
>>   			     (int)strcspn(bol, " \t\r\n"), bol);
>> +
>> +	if (item->command == TODO_COMMENT) {
>> +		item->commit = NULL;
>> +		item->arg_offset = bol - buf;
>> +		item->arg_len = eol - bol;
>> +		return 0;
>> +	}
> 
> And the extra stuff that are only relevant to a comment line is
> naturally processed by the caller.  OK.
> 
> Thanks.  Looking good so far.
> 


  reply	other threads:[~2026-06-23 15:53 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-20 15:04 [PATCH 0/2] status: improve rebase todo list parsing Phillip Wood
2026-04-20 15:04 ` [PATCH 1/2] sequencer: factor out parsing of todo commands Phillip Wood
2026-04-22  0:32   ` Elijah Newren
2026-04-20 15:04 ` [PATCH 2/2] status: improve rebase todo list parsing Phillip Wood
2026-04-20 16:38   ` Tian Yuchen
2026-04-21 16:03     ` Phillip Wood
2026-04-22  0:32   ` Elijah Newren
2026-04-22 13:28     ` Patrick Steinhardt
2026-04-22 14:14       ` Phillip Wood
2026-04-22 14:15     ` Phillip Wood
2026-05-01 15:16 ` [PATCH v2 0/2] " Phillip Wood
2026-05-01 15:16   ` [PATCH v2 1/2] sequencer: factor out parsing of todo commands Phillip Wood
2026-05-01 15:16   ` [PATCH v2 2/2] status: improve rebase todo list parsing Phillip Wood
2026-05-31  0:46     ` Junio C Hamano
2026-06-01 15:20       ` Phillip Wood
2026-06-11 16:08         ` Junio C Hamano
2026-06-22  8:36           ` Phillip Wood
2026-05-01 18:19   ` [PATCH v2 0/2] " Phillip Wood
2026-06-22  8:36 ` [PATCH v3 " Phillip Wood
2026-06-22  8:36   ` [PATCH v3 1/2] sequencer: factor out parsing of todo commands Phillip Wood
2026-06-22 17:00     ` Junio C Hamano
2026-06-23 15:53       ` Phillip Wood [this message]
2026-06-22  8:36   ` [PATCH v3 2/2] status: improve rebase todo list parsing Phillip Wood
2026-06-22 17:26     ` Junio C Hamano
2026-06-22 21:43     ` Junio C Hamano
2026-06-23 15:54       ` Phillip Wood
2026-06-23 15:53 ` [PATCH v4 0/2] " Phillip Wood
2026-06-23 15:53   ` [PATCH v4 1/2] sequencer: factor out parsing of todo commands Phillip Wood
2026-06-23 15:53   ` [PATCH v4 2/2] status: improve rebase todo list parsing Phillip Wood

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=65d38915-019e-4e2c-838f-980023e0c2af@gmail.com \
    --to=phillip.wood123@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=newren@gmail.com \
    --cc=phillip.wood@dunelm.org.uk \
    --cc=ps@pks.im \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox