Message ID | 20240312091719.GD95609@coredump.intra.peff.net (mailing list archive) |
---|---|
State | Accepted |
Commit | 1751e581a333f01b074903b6e34c838db3132824 |
Headers | show |
Series | allow multi-byte core.commentChar | expand |
diff --git a/builtin/commit.c b/builtin/commit.c index a91197245f..b2d05c0cc9 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -685,9 +685,10 @@ static void adjust_comment_line_char(const struct strbuf *sb) char *candidate; const char *p; - comment_line_char = candidates[0]; - if (!memchr(sb->buf, comment_line_char, sb->len)) + if (!memchr(sb->buf, candidates[0], sb->len)) { + comment_line_char = candidates[0]; return; + } p = sb->buf; candidate = strchr(candidates, *p);
When core.commentChar is set to "auto", we check a set of candidate characters against the proposed buffer to see which if any can be used without ambiguity. But before we do that, we optimize for the common case that the default "#" is fine by just seeing if it is present in the buffer at all. The way we do this is a bit subtle, though: we assign the candidate character to comment_line_char preemptively, then check if it works, and return if it does. The subtle part is that sometimes setting comment_line_char is important (after we return, the important outcome is the fact that we have set the variable) and sometimes it is useless (if our optimization fails, we go on to do the more careful checks and eventually assign something else instead). To make it more clear what is happening (and to make further refactoring of comment_line_char easier), let's check our candidate character directly, and then assign as part of returning if it worked out. Signed-off-by: Jeff King <peff@peff.net> --- builtin/commit.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)