-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tuesday, 10.07.2012 at 01:52 +0200, Christoph Anton Mitterer wrote:

> Not sure whether this is a bug or simply a "not possible",
> but when using colordiff like:
> wdiff  .bashrc_* | colordiff
> on the two attached files... I get no colors.
> It works on other files, though.

I suspect this is an edge case where the particular files you're diffing
have content which confuses colordiff's regex parser for wdiff markup.
The simple diff is:

$ /usr/bin/diff bashrc_*
60c60
< 
PS1='${debian_chroot:+($debian_chroot)}\[\033[0;31m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]\$
 '
- ---
> PS1='${debian_chroot:+($debian_chroot)}\[\033[0;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]\$
>  '

where one is looking for the 31m -> 32m to be picked up, I presume.

Note first of all that wdiff is "word diff" and so the entire string
'PS1' to '$' will be considered a word.  Therefore in this particular
example, even if the colour markup was working properly, you'd not get
much better output that using diff/colordiff (instead of wdiff), because
of the lack of spaces!

However, to address the actual issue: wdiff produces this output:

  
[-PS1='${debian_chroot:+($debian_chroot)}\[\033[0;31m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]\$-]
  
{+PS1='${debian_chroot:+($debian_chroot)}\[\033[0;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]\$+}
 '

which colordiff's parser fails to recognise as wdiff format, even when
forced with the option '--diff-type=wdiff'.  I presume the existence of
'-', '+', '[' and '{' etc. in the text confuses the regex, specifically

colordiff.pl 1.0.10 lines 253 to 262 (for detection):

    # wdiff deleted/added patterns
    # should almost always be pairwaise?
    elsif ($record =~ /\[-.*?-\]/s) {
        $diff_type = 'wdiff';
        last DIFF_TYPE;
    }
    elsif ($record =~ /\{\+.*?\+\}/s) {
        $diff_type = 'wdiff';
        last DIFF_TYPE;
    }

and

colordiff.pl 1.0.10 lines 442 to 445 (for output):

    elsif ($diff_type eq 'wdiff') {
        $_ =~ s/(\[-[^]]*?-\])/$file_old$1$colour{off}/g;
        $_ =~ s/(\{\+[^]]*?\+\})/$file_new$1$colour{off}/g;
    }

I don't immediately see the fix, since I appear to be suffering from
regex blindness(!), but I'll record it here in case anyone else can spot
it.

Dave.

- -- 
Dave Ewart da...@sungate.co.uk, http://twitter.com/DaveEwart
All email from me is digitally signed, http://www.sungate.co.uk/
Fingerprint: AEC5 9360 0A35 7F66 66E9 82E4 9E10 6769 CD28 DA92
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAk/8CoMACgkQnhBnac0o2pLv7ACgsPCVKWvbtMZS6rhHbz57ZiO3
24sAn03LuIYyowK3Gg7xGn5OtQf/FHqC
=Dh6d
-----END PGP SIGNATURE-----



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to