Subject: Re: [PATCH] wt-status.c: Modified status message shown for a parent-less branch

From: Junio C Hamano <[email-masked]>
Date: Mon, 12 Jun 2017 11:28:56 -0700

Kaartic Sivaraam <[email-masked]> writes:

>> Adding a bit to "struct wt_status" is a good first step to allow all
>> three (i.e. in addition to "Initial commit" and "Changes to be
>> committed", "Changes not staged for commit" is the other one that
>> shares this potential confusion factor) to be phrased in a way that
>> is more appropriate in an answer to the question "what is the status
>> of my working area?", I would think.
>> 
>> Thanks.
>> 
> It seems that the current change has to be discarded altogether and
> further the change required doesn't look trivial. This seems to warrant
> some bit of research of the code base. As a first step I would like to
> know which part of the code base creates the commit template. I guess
> much can't be done without knowing how it's created.

Perhaps something along this line (warning: not even compile
tested)?

 builtin/commit.c |  1 +
 wt-status.c      | 15 ++++++++++++---
 wt-status.h      |  1 +
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/builtin/commit.c b/builtin/commit.c
index da1ba4c862..ffb2d71d3d 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -1652,6 +1652,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
 		usage_with_options(builtin_commit_usage, builtin_commit_options);
 
 	status_init_config(&s, git_commit_config);
+	s.commit_template = 1;
 	status_format = STATUS_FORMAT_NONE; /* Ignore status.short */
 	s.colopts = 0;
 
diff --git a/wt-status.c b/wt-status.c
index 25aafc35c8..006aaf9e76 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -196,7 +196,10 @@ static void wt_longstatus_print_cached_header(struct wt_status *s)
 {
 	const char *c = color(WT_STATUS_HEADER, s);
 
-	status_printf_ln(s, c, _("Changes to be committed:"));
+	if (s->commit_template)
+		status_printf_ln(s, c, _("Changes to be committed:"));
+	else
+		status_printf_ln(s, c, _("Changes already in the index:"));
 	if (!s->hints)
 		return;
 	if (s->whence != FROM_COMMIT)
@@ -214,7 +217,10 @@ static void wt_longstatus_print_dirty_header(struct wt_status *s,
 {
 	const char *c = color(WT_STATUS_HEADER, s);
 
-	status_printf_ln(s, c, _("Changes not staged for commit:"));
+	if (s->commit_template)
+		status_printf_ln(s, c, _("Changes not staged for commit:"));
+	else
+		status_printf_ln(s, c, _("Changes not yet in the index:"));
 	if (!s->hints)
 		return;
 	if (!has_deleted)
@@ -1578,7 +1584,10 @@ static void wt_longstatus_print(struct wt_status *s)
 
 	if (s->is_initial) {
 		status_printf_ln(s, color(WT_STATUS_HEADER, s), "%s", "");
-		status_printf_ln(s, color(WT_STATUS_HEADER, s), _("Initial commit"));
+		status_printf_ln(s, color(WT_STATUS_HEADER, s),
+				 s->commit_template
+				 ? _("Initial commit")
+				 : _("No commit yet on the branch"));
 		status_printf_ln(s, color(WT_STATUS_HEADER, s), "%s", "");
 	}
 
diff --git a/wt-status.h b/wt-status.h
index 8a3864783b..17f72f2346 100644
--- a/wt-status.h
+++ b/wt-status.h
@@ -77,6 +77,7 @@ struct wt_status {
 	unsigned colopts;
 	int null_termination;
 	int show_branch;
+	int commit_template;
 	int hints;
 
 	enum wt_status_format status_format;