#! /usr/bin/ruby
# usage: rip-detect-conflicts [-p] PACKAGE_PATH [PACKAGE_PATH] ...
#
# Determines whether a list of packages can exist in harmony.
#
# If given -p, prints parseable output. Each line is
# then in this format:
#   package-name SP installed-version TAB requested-version
#
# Exit codes:
#   0 No conflicts
#   1 Conflicts (printed)
#   4 Given PACKAGE_PATH not found

require 'rip/script'

parse = ARGV.delete('-p')
env = Environment.new

rip("installed") do |package|
  env.merge("#{package}/metadata.rip")
end

ARGV.each do |arg|
  exit 4 if arg.include?('/') && !File.exists?(arg)
  env.merge(arg)
end

if env.conflicts?
  warn "Conflicts" if parse.nil?

  env.conflicts.each do |package|
    installed_at = env[package.name].version
    if parse
      warn "#{package.name} #{installed_at}\t#{package.version}"
    else
      warn "  #{package.name}"
      warn "    #{package.version} requested, #{installed_at} already installed"
    end
  end

  exit 1
end
