Package: colordiff
Version: 1.0.16-1
Severity: normal
Tags: patch

Dear Maintainer,

The README says that one can do:

    If you want to force disable colour escape sequences (for example
    pipe the output to patch), you can use option '--color=no' to do
    so:

    $ diff -u file1 file2 | colordiff --color=no | patch -p0 -d 
another-working-dir


However in 1.0.16 this does not work bcause $color_patch is only used
if output is to a file:

    if ((-f STDOUT) && ($color_patch == 0)) {
        ... disable color output ...


So I propose the attached patch to make sure that *if set*
$color_patch can override the automatic decisions either way.

It would also make sense to ship a /etc/colordiffrc file where
color_patches is set to auto, but whatever the case one would be able
to get the desired behavior by using --color=XXX on the command line.



-- System Information:
Debian Release: 9.0
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'stable')
Architecture: amd64
 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.9.0-2-amd64 (SMP w/8 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages colordiff depends on:
ii  perl  5.24.1-2

colordiff recommends no packages.

colordiff suggests no packages.

-- Configuration Files:
/etc/colordiffrc changed:
banner=no
color_patches=auto
diff_cmd=diff
plain=off
newtext=darkgreen
oldtext=darkred
diffstuff=darkcyan
cvsstuff=cyan


-- no debconf information
--- colordiff   2015-10-26 15:50:33.000000000 +0100
+++ colordiff.new       2017-05-18 05:27:38.616380978 +0200
@@ -31,7 +31,7 @@
 my $app_www      = 'http://www.colordiff.org/';
 my $copyright    = '(C)2002-2015';
 my $show_banner  = 1;
-my $color_patch  = 0;
+my $color_patch  = undef;
 my $diff_cmd     = "diff";
 
 # ANSI sequences for colours
@@ -210,6 +210,8 @@
             if ($setting eq 'color_patches') {
                 if ($value eq 'yes') {
                     $color_patch = 1;
+                } elsif ($value eq 'no') {
+                    $color_patch = 0;
                 }
                 next;
             }
@@ -269,12 +271,13 @@
     $color_patch = 1;
 } elsif ($color_mode eq "no") {
     $color_patch = 0;
+} elsif ($color_mode eq "auto") {
+    $color_patch = undef;
 }
 
-# If output is to a file, switch off colours, unless 'color_patch' is set,
-# which might be due to --color=no being specified
+# If output is to a file, switch off colours unless overriden by $color_patch.
 # Relates to http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=378563
-if ((-f STDOUT) && ($color_patch == 0)) {
+if (!$color_patch && (defined $color_patch || -f STDOUT)) {
     $plain_text  = '';
     $file_old    = '';
     $file_new    = '';

Reply via email to