#!/usr/bin/perl -w
# munge diff of diffs to ignore changes in irrelevant metadata
# assumes non-context diff (as invoked by e.g. xxdiff) of unified context diffs (as generated by e.g. git)
use File::Slurp;

if(grep {$_ eq "-u"} @ARGV or !-f $ARGV[$#ARGV] or read_file($ARGV[$#ARGV]) !~ /^@@ -\d+,\d+ \+\d+,\d+ @@\s*$/m) {
    exec "/usr/bin/diff", @ARGV;
}

open FH, "-|", "/usr/bin/diff", @ARGV or die;
$text = join "", <FH>;
close FH;
$exit = $? >> 8;

foreach $pat (qr/From [0-9a-f]{40} \S.* \d{4}/,
              qr/Date: .* \d{4} \d+:\d+:\d+ [-+]\d{4}/,
              qr/index [0-9a-f]{7}\.\.[0-9a-f]{7}/,
              qr/@@ -\d+,\d+ \+\d+,\d+ @@/) {
    $text =~ s/^\d+c\d+\n< $pat\n---\n> $pat\n//mg;
}

print $text;
exit $exit;

