git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Kong Lucien <Lucien.Kong@ensimag.imag.fr>
Cc: git@vger.kernel.org, Matthieu.Moy@grenoble-inp.fr,
	Duperray Valentin <Valentin.Duperray@ensimag.imag.fr>,
	Jonas Franck <Franck.Jonas@ensimag.imag.fr>,
	Nguy Thomas <Thomas.Nguy@ensimag.imag.fr>,
	Nguyen Huynh Khoi Nguyen 
	<Huynh-Khoi-Nguyen.Nguyen@ensimag.imag.fr>
Subject: Re: [PATCHv5 1/3] wt-status.*: better advices for git status added
Date: Thu, 31 May 2012 14:36:07 -0700	[thread overview]
Message-ID: <7vmx4o58zc.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <1338477344-15940-1-git-send-email-Lucien.Kong@ensimag.imag.fr> (Kong Lucien's message of "Thu, 31 May 2012 17:15:42 +0200")

Kong Lucien <Lucien.Kong@ensimag.imag.fr> writes:

> This patch provides new informative help messages in the display of
> 'git status' (at the top) during conflicts, rebase, am, bisect or
> cherry-pick process.
>
> The new messages are not shown when using options such as -s or
> --porcelain. The messages about the current situation of the user are
> always displayed but the advices on what the user needs to do in order
> to resume a rebase/bisect /am/ commit after resolving conflicts can be

Is there a reason why there is a SP after bisect here?

> hidden by setting advice.statushints to 'false' in the config file.
>
> Thus, information about the updated advice.statushints key are added
> in Documentation/config.txt.
>
> Also, the test t7060-wt-status.sh is now working with the new help
> messages. Tests about suggestions of "git rm" are also added.

Looks much better and getting ready for being at least on 'pu' if
not 'next', it seems.

> Signed-off-by: Kong Lucien <Lucien.Kong@ensimag.imag.fr>
> Signed-off-by: Duperray Valentin <Valentin.Duperray@ensimag.imag.fr>
> Signed-off-by: Jonas Franck <Franck.Jonas@ensimag.imag.fr>
> Signed-off-by: Nguy Thomas <Thomas.Nguy@ensimag.imag.fr>
> Signed-off-by: Nguyen Huynh Khoi Nguyen <Huynh-Khoi-Nguyen.Nguyen@ensimag.imag.fr>

How is your development process work, by the way?  Does everybody on
this list have code in this patch?  Or are you just listing people
who are in the same class taught by Matthieu who reviewed and
commented on this patch?

>  Documentation/config.txt |    2 +
>  t/t7060-wtstatus.sh      |   71 +++++++++++++++++++++
>  wt-status.c              |  154 ++++++++++++++++++++++++++++++++++++++++++++++
>  wt-status.h              |   11 +++
>  4 files changed, 238 insertions(+), 0 deletions(-)
>
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 915cb5a..52f5009 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -162,6 +162,8 @@ advice.*::
>  		Directions on how to stage/unstage/add shown in the
>  		output of linkgit:git-status[1] and the template shown
>  		when writing commit messages.
> +		Directions on how to end the current process shown
> +		in the output of linkgit:git-status[1].

I kind of find this hard to read.  Perhaps it shouldn't be a
separate sentence, but instead should just enhance the existing
limited "stage/unstage/add" set?  The list of updated, modified and
untracked paths with instructions given by the current code is an
incomplete description of the current state, and I view this patch
as filling the missing bits to it to make the output more complete.

So from that point of view, perhaps more like this?

-	Directions on how to stage/unstage/add shown in the
-	output of linkgit:git-status[1] and the template shown
-	when writing commit messages.
+	Show directions on how to proceed from the current state
+	in the output of linkgit:git-status[1] and in the template
+	shown when writing commit messages in linkgit:git-commit[1].

> diff --git a/t/t7060-wtstatus.sh b/t/t7060-wtstatus.sh
> index b8cb490..8a6d68a 100755
> --- a/t/t7060-wtstatus.sh
> +++ b/t/t7060-wtstatus.sh
> @@ -30,6 +30,8 @@ test_expect_success 'Report new path with conflict' '
>  
>  cat >expect <<EOF
>  # On branch side
> +# You have unmerged paths; fix conflicts and run "git commit".
> +#
>  # Unmerged paths:
>  #   (use "git add/rm <file>..." as appropriate to mark resolution)
>  #
> @@ -118,4 +120,73 @@ test_expect_success 'git diff-index --cached -C shows 2 copies + 1 unmerged' '
>  	test_cmp expected actual
>  '

Note what filenames are used to store the expected output and grab
the actual output out of the command.

> +
> +test_expect_success 'status when conflicts with add and rm advice (deleted by them)' '
> +	git init git &&
> +	cd git &&
> +	test_when_finished "cd ../ && rm -rf git" &&

This is a tangent, but this sequence is wrong.  If "git init"
succeeds but "cd git" fails for some reason, you wouldn't clean the
new test repository, and worse, you go up and try to remove a random
"git" that is different from what you created here.

Perhaps I am being a bit superstitous, but I would feel a lot safer
to see if this were written like this:

        git init git &&
        (
		cd git &&
                ... the rest of this test ...
	) &&
        rm -fr git

to avoid mistakes.  For example, if you add any "cd somewhere-else"
in the remainder of the test, your test_when_finished to go to a
relative "cd ../" wouldn't do you any good.

> +	test_commit init main.txt init &&
> +	git checkout -b second_branch &&
> +	git rm main.txt &&
> +	git commit -m "main.txt deleted on second_branch" &&
> +	test_commit second conflict.txt second &&
> +	git checkout master &&
> +	test_commit on_second main.txt on_second &&
> +	test_commit master conflict.txt master &&
> +	test_must_fail git merge second_branch &&
> +	cat >expect <<-\EOF &&
> +	# On branch master
> +	# You have unmerged paths; fix conflicts and run "git commit".
> +	#
> +	# Unmerged paths:
> +	#   (use "git add/rm <file>..." as appropriate to mark resolution)
> +	#
> +	#	both added:         conflict.txt
> +	#	deleted by them:    main.txt
> +	#
> +	# Untracked files:
> +	#   (use "git add <file>..." to include in what will be committed)
> +	#
> +	#	expect
> +	#	output
> +	no changes added to commit (use "git add" and/or "git commit -a")
> +	EOF
> +	git status >output &&
> +	test_cmp expect output
> +'

And rename "output" to "actual" to match the existing practice
(unless there is a compelling reason not to).

> diff --git a/wt-status.c b/wt-status.c
> index dd6d8c4..f4ba021 100644
> --- a/wt-status.c
> +++ b/wt-status.c
> @@ -23,6 +23,7 @@ static char default_wt_status_colors[][COLOR_MAXLEN] = {
>  	GIT_COLOR_GREEN,  /* WT_STATUS_LOCAL_BRANCH */
>  	GIT_COLOR_RED,    /* WT_STATUS_REMOTE_BRANCH */
>  	GIT_COLOR_NIL,    /* WT_STATUS_ONBRANCH */
> +	GIT_COLOR_NORMAL, /* WT_STATUS_IN_PROGRESS */
>  };
>  
>  static const char *color(int slot, struct wt_status *s)
> @@ -728,6 +729,158 @@ static void wt_status_print_tracking(struct wt_status *s)
>  	color_fprintf_ln(s->fp, color(WT_STATUS_HEADER, s), "#");
>  }
>  
> +static int has_unmerged(struct wt_status *s)
> +{
> +	int i;
> +
> +	for (i = 0; i < s->change.nr; i++) {
> +		struct wt_status_change_data *d;
> +		d = s->change.items[i].util;
> +		if (d->stagemask)
> +			return 1;
> +	}
> +	return 0;
> +}
> +
> +static void merge_in_progress_show(struct wt_status *s,
> +				struct wt_status_state *state,
> +				const char *color)

Minor nit: perhaps "show-merge-in-progress" would read more
naturally (same for all other helpers).

> +{
> +	if (has_unmerged(s))
> +		status_printf_ln(s, color, _("You have unmerged paths%s"),
> +			advice_status_hints
> +			? _("; fix conflicts and run \"git commit\".") : ".");
> +	else
> +		status_printf_ln(s, color, _("You are still merging%s"),
> +			advice_status_hints
> +			? _(", run \"git commit\" to conclude merge.") : ".");

The former uses ';' while the latter uses ','.  There is a use of
':' in the rebase-in-progress helper.  Be consistent (if I were
writing this code, I would pick ';').

Would this qualify as a "language lego" i18n/l10n people loathe?
IOW would it be better to have four independent messages?

        "You have unmerged paths."
        "You are still merging."
        "You have unmerged paths; fix conflicts and..."
	"You are still merging; fun \"git commit\" to conclude..."

This is not a rhetorical question.  There is the same issue in the
rebase-in-progress helper.

> +static void am_in_progress_show(struct wt_status *s,
> +				struct wt_status_state *state,
> +				const char *color)
> +{
> +	status_printf_ln(s, color,
> +		_("You are in the middle of an am session:"));
> +	if (state->am_empty_patch)
> +		status_printf_ln(s, color,
> +			_("The current patch is empty!"));

This situation may deserve a "; run 'am --skip' to skip it." advice.

> +static void rebase_in_progress_show(struct wt_status *s,
> +				struct wt_status_state *state,
> +				const char *color)
> +{
> +	if (has_unmerged(s)) {
> +		status_printf_ln(s, color, _("You are currently rebasing%s"),
> +			advice_status_hints
> +			? _(": fix conflicts and then run \"git rebase --continue\".") : ".");
> +		if (advice_status_hints) {
> +			status_printf_ln(s, color,
> +				_("  If you would prefer to skip this patch, instead run \"git rebase --skip\"."));
> +			status_printf_ln(s, color,
> +				_("  To check out  the original branch and stop rebasing run \"git rebase --abort\"."));

Double-space in the middle intended?

This line looks overly long.  Does it fit (with the # prefix) on
typical 80-column terminals?

> +		}
> +	} else if (state->rebase_in_progress) {
> +		status_printf_ln(s, color, _("You are currently rebasing%s"),
> +			advice_status_hints
> +			? _(": all conflicts fixed: run \"git rebase --continue\".") : ".");

The above will show this:

# You are currently rebasing: all conflicts fixed: run "git rebase --continue.

That's 78 cols, which is pushing the right edge too closely,
especially considering that translations tend to make messages
longer.

Aside from questionable use of ':' (I think ';' is better for the
first one, and '.' is better for the latter; and s/run/Run/ to begin
a new sentence), I think this is nicer than the merge-in-progress
message after the user has already marked all paths resolved, which
says "You are still merging" without saying "you have resolved
everything".  Perhaps you meant to hint that by saying "still" (as
opposed to "currently"), but the distinction feels a bit too subtle.


> +	} else {
> +		status_printf_ln(s, color, _("You are currently editing a commit during a rebase."));
> +		if (advice_status_hints) {
> +			status_printf_ln(s, color, _("  You can amend the commit with"));
> +			status_printf_ln(s, color, _("	git commit --amend"));
> +			status_printf_ln(s, color, _("  Once you are satisfied with your changes, run"));
> +			status_printf_ln(s, color, _("	git rebase --continue"));

For an advice in "git status" output, the above may be appropriate,
but would the user see this in "git commit" template, and if so,
isn't it because the user typed "git commit --amend"?  Does it make
sense to suggest to run "git commit --amend" in that context?

The same comment applies to all new advice messages added by this
patch.

Thanks.

  parent reply	other threads:[~2012-05-31 21:36 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-24  9:37 [PATCH/RFC] t7512-status-warnings.sh : better advices for git status Kong Lucien
2012-05-24 17:31 ` Matthieu Moy
2012-05-26 12:38 ` [PATCHv2 1/2] wt-status: " Kong Lucien
2012-05-26 12:38   ` [PATCHv2 2/2] t7512-status-warnings.sh: " Kong Lucien
2012-05-27 12:57     ` Matthieu Moy
2012-05-28  8:43     ` Matthieu Moy
2012-05-26 13:01   ` [PATCHv2 1/2] wt-status: " Nguyen Thai Ngoc Duy
2012-05-26 17:17     ` NGUY Thomas
2012-05-27 12:58     ` Matthieu Moy
2012-05-27 13:10   ` Matthieu Moy
2012-05-28  4:57   ` Junio C Hamano
2012-05-28  7:05     ` Matthieu Moy
2012-05-30  4:27       ` Junio C Hamano
2012-05-28 10:54     ` konglu
2012-05-28 17:36   ` [PATCHv3 1/2] wt-status.*: better advices for git status added Kong Lucien
2012-05-28 17:36     ` [PATCHv3 2/2] t7512-status-warnings.sh: better advices for git status Kong Lucien
2012-05-28 20:36       ` Matthieu Moy
2012-05-28 20:23     ` [PATCHv3 1/2] wt-status.*: better advices for git status added Matthieu Moy
2012-05-29 19:22     ` Junio C Hamano
2012-05-30 11:09       ` konglu
2012-05-30 17:24         ` Junio C Hamano
2012-05-31  6:47         ` Matthieu Moy
2012-05-30 13:23     ` [PATCHv4 1/3] " Kong Lucien
2012-05-30 13:23       ` [PATCHv4 2/3] t7512-status-warnings.sh: better advices for git status Kong Lucien
2012-05-30 13:23       ` [PATCHv4 3/3] Advices about 'git rm' during conflicts (unmerged paths) more relevant Kong Lucien
2012-05-30 18:44         ` Junio C Hamano
2012-05-30 21:50           ` konglu
2012-05-31  7:06         ` Matthieu Moy
2012-05-31  7:59           ` konglu
2012-05-30 18:26       ` [PATCHv4 1/3] wt-status.*: better advices for git status added Junio C Hamano
2012-05-30 19:06         ` Junio C Hamano
2012-05-31  6:42         ` Matthieu Moy
2012-05-31  6:44           ` Matthieu Moy
2012-05-31  6:29       ` Matthieu Moy
2012-05-31  6:34         ` Andrew Ardill
2012-05-31 15:15       ` [PATCHv5 " Kong Lucien
2012-05-31 15:15         ` [PATCHv5 2/3] t7512-status-help.sh: better advices for git status Kong Lucien
2012-05-31 15:15         ` [PATCHv5 3/3] status: don't suggest "git rm" or "git add" if not appropriate Kong Lucien
2012-06-01  8:55           ` Matthieu Moy
2012-06-01 12:15           ` Phil Hord
2012-06-01 14:08             ` konglu
2012-06-01 16:38               ` Junio C Hamano
2012-05-31 21:36         ` Junio C Hamano [this message]
2012-06-01  9:16           ` [PATCHv5 1/3] wt-status.*: better advices for git status added konglu
2012-06-01  9:26             ` Matthieu Moy
2012-06-01 14:50               ` Junio C Hamano
2012-06-01 16:51             ` Junio C Hamano
2012-06-01 19:39               ` konglu
2012-06-01  8:42         ` Matthieu Moy
2012-06-01 11:27           ` konglu
2012-06-01 12:40             ` Phil Hord
2012-06-01 16:57               ` Junio C Hamano
2012-06-04 18:00                 ` Phil Hord
2012-06-03 18:30         ` [PATCHv6 1/4] " Kong Lucien
2012-06-03 18:30           ` [PATCHv6 2/4] t7512-status-help.sh: better advices for git status Kong Lucien
2012-06-03 21:18             ` Junio C Hamano
2012-06-04 10:04               ` konglu
2012-06-04 15:04                 ` Junio C Hamano
2012-06-04 22:07                 ` Junio C Hamano
2012-06-03 18:30           ` [PATCHv6 3/4] status: don't suggest "git rm" or "git add" if not appropriate Kong Lucien
2012-06-03 19:34             ` Matthieu Moy
2012-06-03 18:30           ` [PATCHv6 4/4] status: better advices when splitting a commit (during rebase -i) Kong Lucien
2012-06-03 22:00             ` Junio C Hamano
2012-06-04 15:35             ` Phil Hord
2012-06-05  9:13               ` konglu
2012-06-03 21:06           ` [PATCHv6 1/4] wt-status.*: better advices for git status added Junio C Hamano
2012-06-04  9:51             ` konglu
2012-06-04 14:54               ` Junio C Hamano
2012-06-04 17:19           ` [PATCHv7 " Kong Lucien
2012-06-04 17:19             ` [PATCHv7 2/4] t7512-status-help.sh: better advices for git status Kong Lucien
2012-06-04 21:02               ` Matthieu Moy
2012-06-04 23:12               ` Junio C Hamano
2012-06-04 17:19             ` [PATCHv7 3/4] status: don't suggest "git rm" or "git add" if not appropriate Kong Lucien
2012-06-04 17:19             ` [PATCHv7 4/4] status: better advices when splitting a commit (during rebase -i) Kong Lucien
2012-06-04 23:01             ` [PATCHv7 1/4] wt-status.*: better advices for git status added Junio C Hamano
2012-06-05 10:32               ` konglu
2012-06-05 11:33                 ` Matthieu Moy
2012-06-05 20:21             ` [PATCHv8 " Lucien Kong
2012-06-05 20:21               ` [PATCHv8 2/4] t7512-status-help.sh: better advices for git status Lucien Kong
2012-06-05 20:21               ` [PATCHv8 3/4] status: don't suggest "git rm" or "git add" if not appropriate Lucien Kong
2012-06-05 20:21               ` [PATCHv8 4/4] status: better advices when splitting a commit (during rebase -i) Lucien Kong
2012-06-05 21:16                 ` Junio C Hamano
2012-06-08  9:29                   ` konglu
2012-06-08 15:05                     ` Junio C Hamano
2012-06-07 13:17               ` [PATCHv9 1/4] wt-status.*: better advices for git status added Lucien Kong
2012-06-07 13:17                 ` [PATCHv9 2/4] t7512-status-help.sh: better advices for git status Lucien Kong
2012-06-07 13:17                 ` [PATCHv9 3/4] status: don't suggest "git rm" or "git add" if not appropriate Lucien Kong
2012-06-07 13:17                 ` [PATCHv9 4/4] status: better advices when splitting a commit (during rebase -i) Lucien Kong
2012-06-07 18:07                   ` Junio C Hamano
2012-06-07 20:42                   ` Junio C Hamano
2012-06-07 21:05                     ` konglu
2012-06-10 11:17                 ` [PATCHv10 1/4] wt-status.*: better advices for git status added Lucien Kong
2012-06-10 11:17                   ` [PATCHv10 2/4] t7512-status-help.sh: better advices for git status Lucien Kong
2012-06-10 11:17                   ` [PATCHv10 3/4] status: don't suggest "git rm" or "git add" if not appropriate Lucien Kong
2012-06-10 11:17                   ` [PATCHv10 4/4] status: better advices when splitting a commit (during rebase -i) Lucien Kong
2012-06-11 20:21                     ` Junio C Hamano
2012-06-12  7:14                       ` konglu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7vmx4o58zc.fsf@alter.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=Franck.Jonas@ensimag.imag.fr \
    --cc=Huynh-Khoi-Nguyen.Nguyen@ensimag.imag.fr \
    --cc=Lucien.Kong@ensimag.imag.fr \
    --cc=Matthieu.Moy@grenoble-inp.fr \
    --cc=Thomas.Nguy@ensimag.imag.fr \
    --cc=Valentin.Duperray@ensimag.imag.fr \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).