VERSION_FILE = './lib/onapp/engine/version.rb'
require VERSION_FILE

def die(msg)
  puts msg
  exit 1
end

def ask(msg, default = nil)
  print "%s (Default: %s): " % [msg, default ? default : "<empty>"]
  value = $stdin.gets.strip
  value.empty? ? default : value
end

def ask_yn?(msg)
  val = ask(msg.to_s + " (y/n)", "y")
  val[0] == 'y' ? true : false
end

def ask_sh(cmd)
  sh(cmd) if ask_yn?(cmd)
end

def release(version)
  die("version can't be empty") if version.nil? || version.to_s.empty?
  sh %Q(sed -i 's/VERSION.\\+$/VERSION = "#{version}"/' #{VERSION_FILE})
  sh "git commit --message 'Bump version to #{version}' #{VERSION_FILE}"

  sh "git tag v#{version}"
  if ask_yn?("Push commit and tags?")
    sh "git push origin HEAD v#{version}"
  else
    cleanup(version)
  end
end

def cleanup(version)
  puts
  puts "Making cleanup..."
  puts
  sh "git tag -d v#{version}"
  sh "git reset HEAD~1"
  sh "git checkout #{VERSION_FILE}"
  puts
  puts "Cleanup finished!"
  puts
end

desc "Update version.rb, make a tag and push"
task :release do
  version = nil
  trap(:INT) { cleanup(version) if version; die("Interrupted! Exiting...") }
  default_version = Onapp::Engine::VERSION.sub(/\d+$/) { |n| n.to_i + 1 }
  version = ask "Please, specify release version", default_version
  release(version)
end

GRAPHVIZ = FileList['*.gv']

desc 'Generate png-files from gv-files'
task :draw => GRAPHVIZ do |t|
  t.prerequisites.each do |graphviz|
    png = File.basename(graphviz, '.gv') + '.png'
    sh "dot -Tpng #{graphviz} > #{png}"
  end
end
