Matthieu Moy <matthieu....@imag.fr> writes:

> The old message did not mention the :regex:file form.
>
> To avoid overly long lines, split the message into two lines (in case
> item->string is long, it will be the only part truncated in a narrow
> terminal).
>
> Signed-off-by: Matthieu Moy <matthieu....@imag.fr>
> ---
>  line-log.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/line-log.c b/line-log.c
> index a490efe..e725248 100644
> --- a/line-log.c
> +++ b/line-log.c
> @@ -575,7 +575,8 @@ parse_lines(struct commit *commit, const char *prefix, 
> struct string_list *args)
>  
>               name_part = skip_range_arg(item->string);
>               if (!name_part || *name_part != ':' || !name_part[1])
> -                     die("-L argument '%s' not of the form start,end:file",
> +                     die("invalid -L argument '%s'.\n"
> +                         "It should be of the form start,end:file or 
> :regex:file.",
>                           item->string);
>               range_part = xstrndup(item->string, name_part - item->string);
>               name_part++;

Hmm.

While I understand and even agree with the reasoning behind chomping
the line after a potentially long user-supplied argument, it
somewhat bothers me that the output of subsequent lines would begin
without the prefix.

Do we have any other multi-line die/error/warning message?

I am tempted to suggest doing something along the lines of the
attached, if we were to start using multi-line die/error/warning
like this one.  Obviously we would need something similar on the
vwritef() side as well.

 usage.c | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/usage.c b/usage.c
index ed14645..09710fa 100644
--- a/usage.c
+++ b/usage.c
@@ -8,9 +8,26 @@
 
 void vreportf(const char *prefix, const char *err, va_list params)
 {
-       char msg[4096];
-       vsnprintf(msg, sizeof(msg), err, params);
-       fprintf(stderr, "%s%s\n", prefix, msg);
+       char msg[4096], *bol;
+       int len;
+
+       len = vsnprintf(msg, sizeof(msg), err, params);
+       if (sizeof(msg) < len)
+               len = sizeof(msg);
+       bol = msg;
+       while (1) {
+               int linelen;
+               char *eol = memchr(bol, '\n', len);
+               if (!eol)
+                       linelen = len;
+               else
+                       linelen = eol - bol;
+               fprintf(stderr, "%s%.*s\n", prefix, linelen, bol);
+               if (!eol)
+                       break;
+               bol = eol + 1;
+               len -= linelen + 1;
+       }
 }
 
 void vwritef(int fd, const char *prefix, const char *err, va_list params)
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to