Re: [PATCH] status: fix verbose status coloring inconsistency

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



"Lance Ward via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes:

> From: Lance Ward <ljward10@xxxxxxxxx>
>
> Currently setting color.status=always results in a colored diff when

Our log message begins with the description of the current status,
so "Currently" is not something you need to say.

What command with what options?  "git status" does not even show
"diff" at least by default. 

    ... goes, experiments, and guesses what the poster means ...

Perhaps you meant something like this:

    status: honor color.status=always when sending diff output to non tty

    "git status --verbose" shows the patch in color by default (in
    addition to the list of added, modified, and/or deleted paths)
    when the output goes to a tty.  With color.status configuration
    set to 'always' and sending the output to a non-tty, the list of
    paths are colored as expected, but the patch output loses colors.

And then after the description of the current status, you give
orders to a patch monkey to fix the code "to be like so".

    This is because the code did not pass the settings read from the
    configuration and the command line to the underlying machinery
    that generates the patch output.  Fix it to do so.

> going stdout, but an uncolored diff when going to other files or piping
> to other commands such as less or more.  This patch fixes this and now
> color.status=always implies color.diff=always regardless of the output
> location.
>
> Signed-off-by: Lance Ward <ljward10@xxxxxxxxx>
> ---

Eric may deserve Helped-by: mention.

>  t/t7527-status-color-pipe.sh | 55 ++++++++++++++++++++++++++++++++++++

Don't we already have test that checks "status" output including its
coloring already? I'd rather see us adding to existing test script,
than allocating a new number for a small subset of features being
tested for a command.  After all, test numbers are limited resource.

> +test_expect_success setup '
> +	echo 1 >original &&
> +	git add .
> +'
> +
> +# Normal git status does not pipe colors

What does "pipe colors" mean?  "color its output on a non-tty", you mean?

> +test_expect_success 'git status' '
> +	git status >raw &&
> +	test_decode_color <raw >out &&
> +	grep "original$" out
> +'

Not "new file: *original$" or something less false-positive prone?

> +# Test color.status=never (expect same as above)
> +test_expect_success 'git -c color.status=never status' '
> +	git -c color.status=never status >raw &&
> +	test_decode_color <raw >out &&
> +	grep "original$" out
> +'
> +

Would it make sense to have tests for color.status=true, I wonder.
It requires tty to actually "see" the colors output but sending
the output to tty is the normal use case, so we should care...

> +# Test color.status=always
> +test_expect_success 'git -c color.status=always status' '
> +	git -c color.status=always status >raw &&
> +	test_decode_color <raw >out &&
> +	grep "original<RESET>$" out
> +'

OK.  I understand that this passes without the patch below.

> +# Test verbose (default)
> +test_expect_success 'git status -v' '
> +	git status -v >raw &&
> +	test_decode_color <raw >out &&
> +	grep "+1" out
> +'

I think you meant to catch the new contents "1" stored in the file
whose name is "original", but this will hit the hunk header, no?

    @@ -0,0 +1 @@
    +1

IOW, the grep patterns throughout this patch may be a bit too loose
and prone to false hits.

> +# Test verbose color.status=never
> +test_expect_success 'git -c color.status=never status -v' '
> +	git -c color.status=never status -v >raw &&
> +	test_decode_color <raw >out &&
> +	grep "+1" out
> +'
> +
> +# Test verbose color.status=always
> +test_expect_success 'git -c color.status=always status -v' '
> +	git -c color.status=always status -v >raw &&
> +	test_decode_color <raw >out &&
> +	grep "<CYAN>@@ -0,0 +1 @@<RESET>" out &&
> +	grep "GREEN>+<RESET><GREEN>1<RESET>" out
> +'

Is the missing open bra "<" before GREEN intended?

Are we forcing the standard palette?

> +test_done
> diff --git a/wt-status.c b/wt-status.c
> index 0c8287a023e..1e9c899a7b2 100644
> --- a/wt-status.c
> +++ b/wt-status.c
> @@ -1064,6 +1064,8 @@ static void wt_longstatus_print_verbose(struct wt_status *s)
>  	if (s->fp != stdout) {
>  		rev.diffopt.use_color = 0;
>  		wt_status_add_cut_line(s->fp);
> +	} else {
> +		rev.diffopt.use_color = s->use_color;
>  	}
>  	if (s->verbose > 1 && s->committable) {
>  		/* print_updated() printed a header, so do we */
>
> base-commit: e6362826a0409539642a5738db61827e5978e2e4

Thanks.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux