#!/usr/bin/ruby -w

installed_packages_with_version = `grep-status \
                                   -XFStatus 'install ok installed' \
                                   -sPackage -sVersion`

version_for_installed_package = Hash.new
installed_packages_with_version.split("\n\n").each do |package|
  package, version = package.split("\n")
  package.sub!(/^Package: /, "")
  version.sub!(/^Version: /, "")
  version_for_installed_package[package] = version
end

available_packages_with_version = `grep-dctrl . \
                                   -sPackage -sVersion \
                                   /var/lib/apt/lists/*Packages`

versions_for_available_package = Hash.new { |h, k| h[k] = Array.new }
available_packages_with_version.split("\n\n").each do |package|
  package, version = package.split("\n")
  package.sub!(/^Package: /, "")
  version.sub!(/^Version: /, "")
  versions_for_available_package[package] << version
end

version_for_installed_package.each do |package, installed_version|
  available_versions = versions_for_available_package[package]
  if available_versions.empty?
    puts "Package #{package} is installed with version " \
         "#{installed_version}, but no versions are available"
  elsif not available_versions.include? installed_version
    plural = available_versions.length > 1
    puts "Package #{package} is installed with version " \
         "#{installed_version}, but only available version" \
         "#{plural ? 's are' : ' is'} " \
         "#{available_versions.join(' and ')}"
  end
end
