#! /usr/bin/ruby

class Result
  attr_accessor :version, :result, :guess, :explanation
  def to_s
    "#{@version} #{@result} #{@guess} #{@explanation}"
  end
end

previous = {}
IO::read(ARGV[0]).each_line do |l|
  l.chomp!
  r = Result::new
  p, r.version, r.result, r.guess, r.explanation = l.split(' ', 5)
  if r.explanation.nil?
    r.explanation = ""
  end
  # cleanup old explanations
  r.explanation.gsub!(/ NEWFAIL$/ ,'')
  previous[p] = r 
end

IO::read(ARGV[1]).each_line do |l|
  l.chomp!
  r = Result::new
  pkg, r.version, r.result, r.guess, r.explanation = l.split(' ', 5)
  prev = previous[pkg]
  if prev.nil?
    if r.explanation.nil?
      r.explanation = "TODO NEWFAIL"
    else
      r.explanation += " TODO NEWFAIL"
    end
  elsif prev.explanation !~ / TODO/
    r.explanation = prev.explanation
    r.explanation.gsub!(/RECHECK[^\s]*/,'')
    r.explanation.gsub!(/NEWFAIL/, '')
    r.explanation.gsub!(/\s+/, ' ')
    r.explanation += " RECHECK"
    r.explanation += " RECHECK_VERSION" if r.version != prev.version
    r.explanation += " RECHECK_GUESS" if r.guess != prev.guess
  else
    r.explanation = prev.explanation
  end
  previous.delete(pkg)
  puts "#{pkg} #{r}"
end
File::open('no-longer-fails', 'w') do |f|
  previous.each_pair do |pkg, val|
    f.puts pkg + ' ' + val.to_s
  end
end

