]> git.ipfire.org Git - thirdparty/git.git/blobdiff - wt-status.c
Merge branch 'tb/t7700-fixup'
[thirdparty/git.git] / wt-status.c
index 084bfc584f7944868cdf5251cd72e09d4ae772a7..bdfc23e2ae7de8a9521c03420448e412d4262d84 100644 (file)
@@ -1093,8 +1093,11 @@ size_t wt_status_locate_end(const char *s, size_t len)
        strbuf_addf(&pattern, "\n%s %s", comment_line_str, cut_line);
        if (starts_with(s, pattern.buf + 1))
                len = 0;
-       else if ((p = strstr(s, pattern.buf)))
-               len = p - s + 1;
+       else if ((p = strstr(s, pattern.buf))) {
+               size_t newlen = p - s + 1;
+               if (newlen < len)
+                       len = newlen;
+       }
        strbuf_release(&pattern);
        return len;
 }
@@ -1107,12 +1110,15 @@ void wt_status_append_cut_line(struct strbuf *buf)
        strbuf_add_commented_lines(buf, explanation, strlen(explanation), comment_line_str);
 }
 
-void wt_status_add_cut_line(FILE *fp)
+void wt_status_add_cut_line(struct wt_status *s)
 {
        struct strbuf buf = STRBUF_INIT;
 
+       if (s->added_cut_line)
+               return;
+       s->added_cut_line = 1;
        wt_status_append_cut_line(&buf);
-       fputs(buf.buf, fp);
+       fputs(buf.buf, s->fp);
        strbuf_release(&buf);
 }
 
@@ -1143,11 +1149,12 @@ static void wt_longstatus_print_verbose(struct wt_status *s)
         * file (and even the "auto" setting won't work, since it
         * will have checked isatty on stdout). But we then do want
         * to insert the scissor line here to reliably remove the
-        * diff before committing.
+        * diff before committing, if we didn't already include one
+        * before.
         */
        if (s->fp != stdout) {
                rev.diffopt.use_color = 0;
-               wt_status_add_cut_line(s->fp);
+               wt_status_add_cut_line(s);
        }
        if (s->verbose > 1 && s->committable) {
                /* print_updated() printed a header, so do we */
@@ -1176,8 +1183,6 @@ static void wt_longstatus_print_tracking(struct wt_status *s)
        struct strbuf sb = STRBUF_INIT;
        const char *cp, *ep, *branch_name;
        struct branch *branch;
-       char comment_line_string[3];
-       int i;
        uint64_t t_begin = 0;
 
        assert(s->branch && !s->is_initial);
@@ -1202,16 +1207,11 @@ static void wt_longstatus_print_tracking(struct wt_status *s)
                }
        }
 
-       i = 0;
-       if (s->display_comment_prefix) {
-               comment_line_string[i++] = comment_line_char;
-               comment_line_string[i++] = ' ';
-       }
-       comment_line_string[i] = '\0';
-
        for (cp = sb.buf; (ep = strchr(cp, '\n')) != NULL; cp = ep + 1)
                color_fprintf_ln(s->fp, color(WT_STATUS_HEADER, s),
-                                "%s%.*s", comment_line_string,
+                                "%s%s%.*s",
+                                s->display_comment_prefix ? comment_line_str : "",
+                                s->display_comment_prefix ? " " : "",
                                 (int)(ep - cp), cp);
        if (s->display_comment_prefix)
                color_fprintf_ln(s->fp, color(WT_STATUS_HEADER, s), "%s",