# [PATCH] No color diff when redirecting to file

7 messages from 2011-01-23 to 2011-01-24. Participants: Sascha Peilicke, Johannes Sixt, Matthieu Moy, Junio C Hamano.
Thread: https://gitlist.dev/t/26323

## Sascha Peilicke, 2011-01-23 13:10

Subject: [PATCH] No color diff when redirecting to file
Message-ID: <201101231410.48528.saschpe@gmx.de>
URL: https://gitlist.dev/e/201101231410.48528.saschpe%40gmx.de

```
Previously, when having color diffs enabled and redirecting 'git diff'
into a file, one ends up with a messed up file containing termcap color
stuff. This change disables color when diff output is redirected into a
file.

Signed-off-by: Sascha Peilicke <saschpe@gmx.de>
---
 diff.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/diff.c b/diff.c
index 5422c43..cd1ecb0 100644
--- a/diff.c
+++ b/diff.c
@@ -2854,6 +2854,11 @@ void diff_setup(struct diff_options *options)
 		DIFF_OPT_SET(options, COLOR_DIFF);
 	options->detect_rename = diff_detect_rename_default;
 
+	struct stat buf;
+	if (fstat(fileno(options->file), &buf) != -1 && S_ISREG(buf.st_mode)) {
+		DIFF_OPT_CLR(options, COLOR_DIFF);
+	}
+
 	if (diff_no_prefix) {
 		options->a_prefix = options->b_prefix = "";
 	} else if (!diff_mnemonic_prefix) {
-- 
1.7.3.4

-- 
Mit freundlichen Grüßen,
Sascha Peilicke
http://saschpe.wordpress.com

```

## Johannes Sixt, 2011-01-23 14:47

Subject: Re: [PATCH] No color diff when redirecting to file
Message-ID: <201101231547.18529.j6t@kdbg.org>
URL: https://gitlist.dev/e/201101231547.18529.j6t%40kdbg.org
In-Reply-To: <201101231410.48528.saschpe@gmx.de>

```
The subject line reads as if you want that color markup appears in a file.

On Sonntag, 23. Januar 2011, Sascha Peilicke wrote:
> Previously, when having color diffs enabled and redirecting 'git diff'
> into a file, one ends up with a messed up file containing termcap color
> stuff. This change disables color when diff output is redirected into a
> file.

But this description and the patch read as if you don't want it.

That said, I cannot reproduce. Perhaps your configuration says 
color.ui=always? If so, then this is expected behavior and not a bug, IMO.

-- Hannes

```

## Matthieu Moy, 2011-01-23 17:29

Subject: Re: [PATCH] No color diff when redirecting to file
Message-ID: <vpq39oj4jfz.fsf@bauges.imag.fr>
URL: https://gitlist.dev/e/vpq39oj4jfz.fsf%40bauges.imag.fr
In-Reply-To: <201101231547.18529.j6t@kdbg.org>

```
Johannes Sixt <j6t@kdbg.org> writes:

> That said, I cannot reproduce. Perhaps your configuration says 
> color.ui=always? If so, then this is expected behavior and not a bug, IMO.

I think you're right.

I tested this (without the patch):

git diff
=> I get color, because I have color.ui = auto

git diff | cat
=> I don't get color

git diff --color=auto | cat
=> no color

git diff --color=always | cat
=> colors, because I've asked

this seems to be just the right behavior.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

```

## Junio C Hamano, 2011-01-23 23:32

Subject: Re: [PATCH] No color diff when redirecting to file
Message-ID: <7voc77mc1v.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7voc77mc1v.fsf%40alter.siamese.dyndns.org
In-Reply-To: <vpq39oj4jfz.fsf@bauges.imag.fr>

```
Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:

> Johannes Sixt <j6t@kdbg.org> writes:
>
>> That said, I cannot reproduce. Perhaps your configuration says 
>> color.ui=always? If so, then this is expected behavior and not a bug, IMO.
>
> I think you're right.
>
> I tested this (without the patch):
>
> git diff
> => I get color, because I have color.ui = auto
>
> git diff | cat
> => I don't get color
>
> git diff --color=auto | cat
> => no color
>
> git diff --color=always | cat
> => colors, because I've asked
>
> this seems to be just the right behavior.

Overall I agree with the above observation, but the original poster says
"redirecting into a _file_".

Another possibility is that the mysterious platform the original poster
did not mention has a broken istty() that mistakes a file descriptor going
to a file (instead of a pipe to another process) as connected to a tty.

```

## Sascha Peilicke, 2011-01-24 08:56

Subject: Re: [PATCH] No color diff when redirecting to file
Message-ID: <201101240956.27579.saschpe@gmx.de>
URL: https://gitlist.dev/e/201101240956.27579.saschpe%40gmx.de
In-Reply-To: <201101231547.18529.j6t@kdbg.org>

```
On Sunday 23 January 2011 15:47:17 you wrote:
> The subject line reads as if you want that color markup appears in a file.
> 
> On Sonntag, 23. Januar 2011, Sascha Peilicke wrote:
> > Previously, when having color diffs enabled and redirecting 'git diff'
> > into a file, one ends up with a messed up file containing termcap color
> > stuff. This change disables color when diff output is redirected into a
> > file.
> 
> But this description and the patch read as if you don't want it.
> 
> That said, I cannot reproduce. Perhaps your configuration says
> color.ui=always? If so, then this is expected behavior and not a bug, IMO.
Nope, it's color.ui=auto
-- 
Mit freundlichen Grüßen,
Sascha Peilicke
http://saschpe.wordpress.com

```

## Sascha Peilicke, 2011-01-24 08:59

Subject: Re: [PATCH] No color diff when redirecting to file
Message-ID: <201101240959.02852.saschpe@gmx.de>
URL: https://gitlist.dev/e/201101240959.02852.saschpe%40gmx.de
In-Reply-To: <vpq39oj4jfz.fsf@bauges.imag.fr>

```
On Sunday 23 January 2011 18:29:52 you wrote:
> Johannes Sixt <j6t@kdbg.org> writes:
> > That said, I cannot reproduce. Perhaps your configuration says
> > color.ui=always? If so, then this is expected behavior and not a bug,
> > IMO.
> 
> I think you're right.
> 
> I tested this (without the patch):
> 
> git diff
> => I get color, because I have color.ui = auto
> 
> git diff | cat
> => I don't get color
> 
> git diff --color=auto | cat
> => no color
> 
> git diff --color=always | cat
> => colors, because I've asked
> 
> this seems to be just the right behavior.

try the same with

git diff > foo

works when

git diff --no-color > foo
-- 
Mit freundlichen Grüßen,
Sascha Peilicke
http://saschpe.wordpress.com

```

## Matthieu Moy, 2011-01-24 09:38

Subject: Re: [PATCH] No color diff when redirecting to file
Message-ID: <vpqtygyhcaq.fsf@bauges.imag.fr>
URL: https://gitlist.dev/e/vpqtygyhcaq.fsf%40bauges.imag.fr
In-Reply-To: <201101240959.02852.saschpe@gmx.de>

```
Sascha Peilicke <saschpe@gmx.de> writes:

> try the same with
>
> git diff > foo

git diff > foo && cat foo
=> no color.

git diff --no-color > foo && cat foo
=> no color either

git diff --color=always > foo && cat foo
=> colors.

Again, just the expected behavior.

If it helps:

$ uname -a
Linux bauges 2.6.36-686 #1 SMP PREEMPT Fri Nov 5 10:35:38 CET 2010 i686 GNU/Linux
$ git --version
git version 1.7.4.rc1.17.ge7ece

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

```
