Re: [PATCH] mailinfo: Remove only one set of square brackets
Andreas Ericsson <ae@op5.se> writes:
Show 26 quoted lines
> git-format-patch prepends patches with a [PATCH x/n] prefix, but
> mailinfo used to remove any number of square-bracket pairs and
> the content between them. This prevents one from using a commit
> subject like this:
>
> [ and ] must be allowed as input
>
> Removing the square bracket pair from this rather clumsily
> constructed subject line loses important information, so we must
> take care not to.
>
> This patch causes the subject stripping to stop after it has
> encountered one pair of square brackets.
>
> One possible downside of this patch is that the patch-handling
> programs will now fail at removing author-added square-brackets
> to be removed, such as
>
> [RFC][PATCH x/n]
>
> However, since format-patch only adds one set of square brackets,
> this behaviour is quite easily undesrstood and defended while the
> previous behaviour is not.
>
> Signed-off-by: Andreas Ericsson <ae@op5.se>
> ---
All good points, and I like this one, including its Subject: line.
Show 34 quoted lines
> builtin-mailinfo.c | 7 +++++++
> 1 files changed, 7 insertions(+), 0 deletions(-)
>
> diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c
> index 92637ac..fb5ad70 100644
> --- a/builtin-mailinfo.c
> +++ b/builtin-mailinfo.c
> @@ -221,6 +221,8 @@ static void cleanup_subject(struct strbuf *subject)
> {
> char *pos;
> size_t remove;
> + int brackets_removed = 0;
> +
> while (subject->len) {
> switch (*subject->buf) {
> case 'r': case 'R':
> @@ -235,10 +237,15 @@ static void cleanup_subject(struct strbuf *subject)
> strbuf_remove(subject, 0, 1);
> continue;
> case '[':
> + /* remove only one set of square brackets */
> + if (brackets_removed)
> + break;
> +
> if ((pos = strchr(subject->buf, ']'))) {
> remove = pos - subject->buf;
> if (remove <= (subject->len - remove) * 2) {
> strbuf_remove(subject, 0, remove + 1);
> + brackets_removed = 1;
> continue;
> }
> } else
> --
> 1.6.3.3.354.gfb24