summaryrefslogtreecommitdiff
path: root/wt-status.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2013-09-20 19:29:01 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-09-20 19:29:01 (GMT)
commit6d3e1f2e453f7473d4ab64ef378309958613c5d7 (patch)
tree93863beb9bc01b1bd47dd61e66cf54939cc34e0c /wt-status.c
parent638924fec2189f3f20ebf5d0ff4cc34ee551dd39 (diff)
parent2e582df0e0f1589054674c8ed3391f240a37a6df (diff)
downloadgit-6d3e1f2e453f7473d4ab64ef378309958613c5d7.zip
git-6d3e1f2e453f7473d4ab64ef378309958613c5d7.tar.gz
git-6d3e1f2e453f7473d4ab64ef378309958613c5d7.tar.bz2
Merge branch 'mm/status-without-comment-char'
"git status" now omits the prefix to make its output a comment in a commit log editor, which is not necessary for human consumption. We may want to tighten the output to omit unnecessary trailing blank lines, but that does not have to be in the scope of this series. * mm/status-without-comment-char: t7508: avoid non-portable sed expression status: add missing blank line after list of "other" files tests: don't set status.displayCommentPrefix file-wide status: disable display of '#' comment prefix by default submodule summary: ignore --for-status option wt-status: use argv_array API builtin/stripspace.c: fix broken indentation
Diffstat (limited to 'wt-status.c')
-rw-r--r--wt-status.c91
1 files changed, 69 insertions, 22 deletions
diff --git a/wt-status.c b/wt-status.c
index c8c2d77..706a6f7 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -9,6 +9,7 @@
#include "diffcore.h"
#include "quote.h"
#include "run-command.h"
+#include "argv-array.h"
#include "remote.h"
#include "refs.h"
#include "submodule.h"
@@ -46,9 +47,11 @@ static void status_vprintf(struct wt_status *s, int at_bol, const char *color,
strbuf_vaddf(&sb, fmt, ap);
if (!sb.len) {
- strbuf_addch(&sb, comment_line_char);
- if (!trail)
- strbuf_addch(&sb, ' ');
+ if (s->display_comment_prefix) {
+ strbuf_addch(&sb, comment_line_char);
+ if (!trail)
+ strbuf_addch(&sb, ' ');
+ }
color_print_strbuf(s->fp, color, &sb);
if (trail)
fprintf(s->fp, "%s", trail);
@@ -59,7 +62,7 @@ static void status_vprintf(struct wt_status *s, int at_bol, const char *color,
eol = strchr(line, '\n');
strbuf_reset(&linebuf);
- if (at_bol) {
+ if (at_bol && s->display_comment_prefix) {
strbuf_addch(&linebuf, comment_line_char);
if (*line != '\n' && *line != '\t')
strbuf_addch(&linebuf, ' ');
@@ -129,6 +132,7 @@ void wt_status_prepare(struct wt_status *s)
s->untracked.strdup_strings = 1;
s->ignored.strdup_strings = 1;
s->show_branch = -1; /* unspecified */
+ s->display_comment_prefix = 0;
}
static void wt_status_print_unmerged_header(struct wt_status *s)
@@ -661,29 +665,57 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitt
char summary_limit[64];
char index[PATH_MAX];
const char *env[] = { NULL, NULL };
- const char *argv[8];
-
- env[0] = index;
- argv[0] = "submodule";
- argv[1] = "summary";
- argv[2] = uncommitted ? "--files" : "--cached";
- argv[3] = "--for-status";
- argv[4] = "--summary-limit";
- argv[5] = summary_limit;
- argv[6] = uncommitted ? NULL : (s->amend ? "HEAD^" : "HEAD");
- argv[7] = NULL;
+ struct argv_array argv = ARGV_ARRAY_INIT;
+ struct strbuf cmd_stdout = STRBUF_INIT;
+ struct strbuf summary = STRBUF_INIT;
+ char *summary_content;
+ size_t len;
sprintf(summary_limit, "%d", s->submodule_summary);
snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", s->index_file);
+ env[0] = index;
+ argv_array_push(&argv, "submodule");
+ argv_array_push(&argv, "summary");
+ argv_array_push(&argv, uncommitted ? "--files" : "--cached");
+ argv_array_push(&argv, "--for-status");
+ argv_array_push(&argv, "--summary-limit");
+ argv_array_push(&argv, summary_limit);
+ if (!uncommitted)
+ argv_array_push(&argv, s->amend ? "HEAD^" : "HEAD");
+
memset(&sm_summary, 0, sizeof(sm_summary));
- sm_summary.argv = argv;
+ sm_summary.argv = argv.argv;
sm_summary.env = env;
sm_summary.git_cmd = 1;
sm_summary.no_stdin = 1;
fflush(s->fp);
- sm_summary.out = dup(fileno(s->fp)); /* run_command closes it */
+ sm_summary.out = -1;
+
run_command(&sm_summary);
+ argv_array_clear(&argv);
+
+ len = strbuf_read(&cmd_stdout, sm_summary.out, 1024);
+
+ /* prepend header, only if there's an actual output */
+ if (len) {
+ if (uncommitted)
+ strbuf_addstr(&summary, _("Submodules changed but not updated:"));
+ else
+ strbuf_addstr(&summary, _("Submodule changes to be committed:"));
+ strbuf_addstr(&summary, "\n\n");
+ }
+ strbuf_addbuf(&summary, &cmd_stdout);
+ strbuf_release(&cmd_stdout);
+
+ if (s->display_comment_prefix) {
+ summary_content = strbuf_detach(&summary, &len);
+ strbuf_add_commented_lines(&summary, summary_content, len);
+ free(summary_content);
+ }
+
+ fputs(summary.buf, s->fp);
+ strbuf_release(&summary);
}
static void wt_status_print_other(struct wt_status *s,
@@ -717,10 +749,11 @@ static void wt_status_print_other(struct wt_status *s,
strbuf_release(&buf);
if (!column_active(s->colopts))
- return;
+ goto conclude;
- strbuf_addf(&buf, "%s#\t%s",
+ strbuf_addf(&buf, "%s%s\t%s",
color(WT_STATUS_HEADER, s),
+ s->display_comment_prefix ? "#" : "",
color(WT_STATUS_UNTRACKED, s));
memset(&copts, 0, sizeof(copts));
copts.padding = 1;
@@ -730,6 +763,8 @@ static void wt_status_print_other(struct wt_status *s,
print_columns(&output, s->colopts, &copts);
string_list_clear(&output, 0);
strbuf_release(&buf);
+conclude:
+ status_printf_ln(s, GIT_COLOR_NORMAL, "");
}
static void wt_status_print_verbose(struct wt_status *s)
@@ -764,6 +799,8 @@ static void wt_status_print_tracking(struct wt_status *s)
struct strbuf sb = STRBUF_INIT;
const char *cp, *ep;
struct branch *branch;
+ char comment_line_string[3];
+ int i;
assert(s->branch && !s->is_initial);
if (prefixcmp(s->branch, "refs/heads/"))
@@ -772,12 +809,22 @@ static void wt_status_print_tracking(struct wt_status *s)
if (!format_tracking_info(branch, &sb))
return;
+ 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),
- "%c %.*s", comment_line_char,
+ "%s%.*s", comment_line_string,
(int)(ep - cp), cp);
- color_fprintf_ln(s->fp, color(WT_STATUS_HEADER, s), "%c",
- comment_line_char);
+ if (s->display_comment_prefix)
+ color_fprintf_ln(s->fp, color(WT_STATUS_HEADER, s), "%c",
+ comment_line_char);
+ else
+ fprintf_ln(s->fp, "");
}
static int has_unmerged(struct wt_status *s)