#!/usr/bin/perl

my ($l1, $l2, @diffargs);
@diffargs = ();

foreach my $arg (@ARGV) {
  if ($arg =~ /^-/) {
    push @diffargs, $arg;
  } elsif (defined $l1) {
    $l2 = $arg;
  } else {
    $l1 = $arg;
  }
}

my $tmp1 = "/tmp/logdiff.$$.1";
my $tmp2 = "/tmp/logdiff.$$.2";
fixfile($l1, $tmp1);
fixfile($l2, $tmp2);

system "diff", @diffargs, $tmp1, $tmp2;
unlink($tmp1);
unlink($tmp2);
exit;

sub fixfile {
  my $inf = shift;
  my $outf = shift;
  die "cannot find $inf" unless -f $inf;
  open (IN, "-|", "sort \"$inf\"") or die "cannot open $inf";
  open (OUT, ">$outf") or die "cannot open $outf";
  while (<IN>) {
    if (!/^([\.Y]\s+\S+\s+\S+)\s+(\S+)\s+(.+)/) {
      print OUT;
      next;
    }

    my ($scorepath, $rules, $meta) = ($1,$2,$3);
    my @rules;
    foreach my $r (split(/,/, $rules)) {
      my $hits = 1;
      # Support compacted RULE(hitcount) format
      if ($r =~ s/\((\d+)\)$//) {
        $hits = $1;
      }
      push @rules, $r for (1 .. $hits);
    }
    @rules = sort grep {
        $_ !~ /^AWL$/
    } @rules;
    $rules = join(',', @rules);

    $meta =~ s/\bscantime=\d+/scantime=N/gs;     # frequently different

    print OUT "$scorepath $rules $meta\n";
  }
  close IN;
  close OUT;
}

