#! /usr/bin/ruby
## Usage: rip-env [-c] [-b] [-d] [-l] [-p] RIPENV [PACKAGE]
##
## Prints, changes, lists, creates, branches, or deletes the ripenvs.

require 'rip/script'
require 'optparse'

if ARGV.empty? || path = ARGV.delete('-p') || ARGV.delete('--path')
  puts path ? File.readlink("#{RIPDIR}/active") : RIPENV
  exit
end

delete = false
branch = false
ripenv = ARGV.detect { |arg| arg[0].chr != '-' }

ARGV.options do |o|
  o.on('-c', '--create') { exec "rip-create #{ripenv}" }
  o.on('-l', '--list')   { exec "rip-envs" }
  o.on('-d', '--delete') { delete = true }
  o.on('-b', '--branch') { branch = true }
  o.on('-h', '--help')   { exec "grep ^## < #$0 | cut -c4-" }
  o.parse!
end

if ripenv.to_s.empty?
  abort "I need a ripenv."
end

if branch
  if RIPENVS.include?(ripenv)
    abort "#{ripenv} already exists. Gimmie a new name."
  end

  cp_r "#{RIPDIR}/#{RIPENV}", "#{RIPDIR}/#{ripenv}"
  rip :create, ripenv

  exit
end

if !RIPENVS.include?(ripenv) && !ripenv.include?('/')
  abort "Can't find ripenv `#{ripenv}'"
end

if delete && RIPENVS.size > 1
  if ripenv == RIPENV
    abort "Can't delete current ripenv."
  end

  exec "rm -rf #{Rip.dir}/#{ripenv}"
elsif delete
  abort "Can't delete only ripenv."
end

rm Rip.active rescue nil
target = ripenv.include?('/') ? File.expand_path(ripenv) : "#{RIPDIR}/#{ripenv}"
ln_s target, Rip.active
puts ripenv
