From e54eef9e1f8adb055c7bbe0e4f50a3716f611dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20R=C3=BChle?= Date: Tue, 2 Jan 2007 20:26:20 +0100 Subject: [PATCH 1/4] Clarify syntax and role of git-add in status output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This uses the actual (simplified) synopsis line from the git-add man page and advertises its incremental nature. Signed-off-by: Jürgen Rühle Signed-off-by: Junio C Hamano --- wt-status.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wt-status.c b/wt-status.c index db427384ff..34be91b77c 100644 --- a/wt-status.c +++ b/wt-status.c @@ -15,7 +15,7 @@ static char wt_status_colors[][COLOR_MAXLEN] = { "\033[31m", /* WT_STATUS_CHANGED: red */ "\033[31m", /* WT_STATUS_UNTRACKED: red */ }; -static const char* use_add_msg = "use \"git add file1 file2\" to include for commit"; +static const char* use_add_msg = "use \"git add ...\" to incrementally add content to commit"; static int parse_status_slot(const char *var, int offset) { From 6e458bf63f48fb7d15cb70ad7c7b7b71915d94a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20R=C3=BChle?= Date: Tue, 2 Jan 2007 20:26:22 +0100 Subject: [PATCH 2/4] Improve "nothing to commit" part of status output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously git-status in a clean working directory would advice the user to use git add. This isn't very helpful when there is nothing to add in the working directory, therefore note a clean working directory while displaying the other sections and print the appropriate message for each case. Signed-off-by: Jürgen Rühle Signed-off-by: Junio C Hamano --- wt-status.c | 24 ++++++++++++++++++------ wt-status.h | 1 + 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/wt-status.c b/wt-status.c index 34be91b77c..ca4690e86b 100644 --- a/wt-status.c +++ b/wt-status.c @@ -51,6 +51,8 @@ void wt_status_prepare(struct wt_status *s) s->verbose = 0; s->commitable = 0; s->untracked = 0; + + s->workdir_clean = 1; } static void wt_status_print_header(const char *main, const char *sub) @@ -162,9 +164,12 @@ static void wt_status_print_changed_cb(struct diff_queue_struct *q, struct diff_options *options, void *data) { + struct wt_status *s = data; int i; - if (q->nr) + if (q->nr) { + s->workdir_clean = 0; wt_status_print_header("Changed but not added", use_add_msg); + } for (i = 0; i < q->nr; i++) wt_status_print_filepair(WT_STATUS_CHANGED, q->queue[i]); if (q->nr) @@ -215,7 +220,7 @@ static void wt_status_print_changed(struct wt_status *s) run_diff_files(&rev, 0); } -static void wt_status_print_untracked(const struct wt_status *s) +static void wt_status_print_untracked(struct wt_status *s) { struct dir_struct dir; const char *x; @@ -250,6 +255,7 @@ static void wt_status_print_untracked(const struct wt_status *s) continue; } if (!shown_header) { + s->workdir_clean = 0; wt_status_print_header("Untracked files", use_add_msg); shown_header = 1; } @@ -291,10 +297,16 @@ void wt_status_print(struct wt_status *s) if (s->verbose && !s->is_initial) wt_status_print_verbose(s); - if (!s->commitable) - printf("%s (%s)\n", - s->amend ? "# No changes" : "nothing to commit", - use_add_msg); + if (!s->commitable) { + if (s->amend) + printf("# No changes\n"); + else if (s->workdir_clean) + printf(s->is_initial + ? "nothing to commit\n" + : "nothing to commit (working directory matches HEAD)\n"); + else + printf("no changes added to commit (use \"git add\" and/or \"git commit [-a|-i|-o]\")\n"); + } } int git_status_config(const char *k, const char *v) diff --git a/wt-status.h b/wt-status.h index 0a5a5b7ba9..892a86c76a 100644 --- a/wt-status.h +++ b/wt-status.h @@ -16,6 +16,7 @@ struct wt_status { int verbose; int amend; int untracked; + int workdir_clean; }; int git_status_config(const char *var, const char *value); From 98bf8a47c296f51ea9722fef4bb81dbfb70cd4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20R=C3=BChle?= Date: Tue, 2 Jan 2007 20:26:23 +0100 Subject: [PATCH 3/4] Support --amend on initial commit in status output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We check the existence of the parent commit to determine whether the status is requested for an initial commit. Since the parent commit depends on the presence of the --amend switch do initial commit detection after command line arguments have been handled. Signed-off-by: Jürgen Rühle Signed-off-by: Junio C Hamano --- wt-status.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/wt-status.c b/wt-status.c index ca4690e86b..9b777a569e 100644 --- a/wt-status.c +++ b/wt-status.c @@ -41,8 +41,6 @@ void wt_status_prepare(struct wt_status *s) unsigned char sha1[20]; const char *head; - s->is_initial = get_sha1("HEAD", sha1) ? 1 : 0; - head = resolve_ref("HEAD", sha1, 0, NULL); s->branch = head ? xstrdup(head) : NULL; @@ -277,6 +275,9 @@ static void wt_status_print_verbose(struct wt_status *s) void wt_status_print(struct wt_status *s) { + unsigned char sha1[20]; + s->is_initial = get_sha1(s->reference, sha1) ? 1 : 0; + if (s->branch) color_printf_ln(color(WT_STATUS_HEADER), "# On branch %s", s->branch); From 3c1eb9cb2d57769f770ddc36fd6b49706608ebb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20R=C3=BChle?= Date: Tue, 2 Jan 2007 20:26:21 +0100 Subject: [PATCH 4/4] Improve cached content header of status output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This tries to be more to the point while also including a pointer on how to unstage changes from the index. Since this header is printed in two different code paths and the name of the reference commit is needed for the unstage part, provide a new printing function. Signed-off-by: Jürgen Rühle Signed-off-by: Junio C Hamano --- wt-status.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/wt-status.c b/wt-status.c index 9b777a569e..8aac526440 100644 --- a/wt-status.c +++ b/wt-status.c @@ -53,6 +53,18 @@ void wt_status_prepare(struct wt_status *s) s->workdir_clean = 1; } +static void wt_status_print_cached_header(const char *reference) +{ + const char *c = color(WT_STATUS_HEADER); + color_printf_ln(c, "# Cached changes to be committed:"); + if (reference) { + color_printf_ln(c, "# (use \"git reset %s ...\" and \"git rm --cached ...\" to unstage)", reference); + } else { + color_printf_ln(c, "# (use \"git rm --cached ...\" to unstage)"); + } + color_printf_ln(c, "#"); +} + static void wt_status_print_header(const char *main, const char *sub) { const char *c = color(WT_STATUS_HEADER); @@ -147,8 +159,7 @@ static void wt_status_print_updated_cb(struct diff_queue_struct *q, if (q->queue[i]->status == 'U') continue; if (!shown_header) { - wt_status_print_header("Added but not yet committed", - "will commit"); + wt_status_print_cached_header(s->reference); s->commitable = 1; shown_header = 1; } @@ -182,8 +193,7 @@ void wt_status_print_initial(struct wt_status *s) read_cache(); if (active_nr) { s->commitable = 1; - wt_status_print_header("Added but not yet committed", - "will commit"); + wt_status_print_cached_header(NULL); } for (i = 0; i < active_nr; i++) { color_printf(color(WT_STATUS_HEADER), "#\t");