#!/usr/bin/env ruby -wKU
$LOAD_PATH << File.expand_path(File.dirname(__FILE__))
$LOAD_PATH << File.expand_path(File.dirname(__FILE__) + '/../lib')

require 'repository'
require 'options'
require 'console'

args = Choice.choices
SCRIPT_NAME = "releaselor"

bundle_version = args[:version] + '.' + args[:build_stamp]
if args[:product_release] == 'full-product'
  gemini_version = args[:gemini_version] + '.' + args[:gemini_build_stamp]
end
release_from_branch = args[:branch_name]
gemini_release_from_branch = args[:gemini_branch_name]

DRY_RUN = args[:dryrun?].nil? ? false : true
puts "This is a dry run..." if DRY_RUN

if File.exist?(File.expand_path(args[:repository_map]))
  paths = Hash.new
  IO.foreach(File.expand_path(args[:repository_map])) do |line|
	paths[$1.strip] = $2.strip if line =~ /([^=]*)=(.*)/
  end
else
  paths = {
	'eclipse-mirror' => 'eclipse-mirror',
	'util' => 'util',
	'test' => 'test',
	'medic' => 'medic',
	'nano' => 'nano',
	'artifact-repository' => 'artifact-repository',
	'kernel' => 'kernel',
	'kernel-tools' => 'kernel-tools',
	'gemini-web' => 'gemini-web',
	'web' => 'web',
	'snaps' => 'snaps',
	'apps' => 'apps',
	'documentation' => 'documentation',
	'web-server' => 'web-server',
	'jetty-server' => 'jetty-server'
  }
end

virgo_eclipse_repo_root = 'ssh://' + args[:remote_user] + '@git.eclipse.org/gitroot/virgo/org.eclipse.virgo.'
gemini_eclipse_repo_root = 'ssh://' + args[:remote_user] + '@git.eclipse.org/gitroot/gemini.web/org.eclipse.gemini.web.'
default_targets = 'clean clean-integration test publish-ivy publish-maven'


if args[:product_release] == 'full-product'

  ALL_REPOS = [
	Repository.new(virgo_eclipse_repo_root,	 'eclipse-mirror',			paths['eclipse-mirror'],		'org.eclipse.virgo.eclipse-mirror', bundle_version, release_from_branch,		'clean'),
	Repository.new(virgo_eclipse_repo_root,	 'util',					paths['util'],					'org.eclipse.virgo.util',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root,	 'test',					paths['test'],					'org.eclipse.virgo.test',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root,	 'medic',					paths['medic'],					'org.eclipse.virgo.medic',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root,	 'nano',					paths['nano'],					'org.eclipse.virgo.nano',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
	Repository.new(virgo_eclipse_repo_root,	 'artifact-repository',		paths['artifact-repository'],	'org.eclipse.virgo.repository',		bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root,	 'kernel',					paths['kernel'],				'org.eclipse.virgo.kernel',			bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root,	 'kernel-tools',			paths['kernel-tools'],			'org.eclipse.virgo.kernel-tools',	bundle_version, release_from_branch,		default_targets),
	Repository.new(gemini_eclipse_repo_root, 'gemini-web-container',	paths['gemini-web'],			'org.eclipse.gemini.web',			gemini_version, gemini_release_from_branch, 'clean clean-integration test doc package publish-ivy publish-maven'),
	Repository.new(virgo_eclipse_repo_root,	 'web',						paths['web'],					'org.eclipse.virgo.web',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root,	 'snaps',					paths['snaps'],					'org.eclipse.virgo.snaps',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root,	 'apps',					paths['apps'],					'org.eclipse.virgo.apps',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root,	 'documentation',			paths['documentation'],			'org.eclipse.virgo.documentation',	bundle_version, release_from_branch,		'clean clean-integration doc-html package publish-ivy publish-package-download'),
	Repository.new(virgo_eclipse_repo_root,	 'web-server',				paths['web-server'],			'org.eclipse.virgo.web-server',		bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root,	 'jetty-server',			paths['jetty-server'],			'org.eclipse.virgo.jetty-server',	bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
  ]

elsif args[:product_release] == 'kernel'

  ALL_REPOS = [
	Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',			paths['eclipse-mirror'],		'org.eclipse.virgo.eclipse-mirror',	bundle_version, release_from_branch,		'clean'),
	Repository.new(virgo_eclipse_repo_root, 'util',						paths['util'],					'org.eclipse.virgo.util',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'test',						paths['test'],					'org.eclipse.virgo.test',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'medic',					paths['medic'],					'org.eclipse.virgo.medic',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root,	 'nano',					paths['nano'],					'org.eclipse.virgo.nano',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
	Repository.new(virgo_eclipse_repo_root, 'artifact-repository',		paths['artifact-repository'],	'org.eclipse.virgo.repository',		bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'kernel',					paths['kernel'],				'org.eclipse.virgo.kernel',			bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'kernel-tools',				paths['kernel-tools'],			'org.eclipse.virgo.kernel-tools',	bundle_version, release_from_branch,		default_targets)
  ]

elsif args[:product_release] == 'web-server'

  ALL_REPOS = [
	Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',			paths['eclipse-mirror'],		'org.eclipse.virgo.eclipse-mirror',	bundle_version, release_from_branch,		'clean'),
	Repository.new(virgo_eclipse_repo_root, 'web',						paths['web'],					'org.eclipse.virgo.web',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'snaps',					paths['snaps'],					'org.eclipse.virgo.snaps',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'apps',						paths['apps'],					'org.eclipse.virgo.apps',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'documentation',			paths['documentation'],			'org.eclipse.virgo.documentation',	bundle_version, release_from_branch,		'clean clean-integration doc-html package publish-ivy publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'web-server',				paths['web-server'],			'org.eclipse.virgo.web-server',		bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'jetty-server',				paths['jetty-server'],			'org.eclipse.virgo.jetty-server',	bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
  ]

elsif args[:product_release] == 'virgo'

  ALL_REPOS = [
	Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',			paths['eclipse-mirror'],		'org.eclipse.virgo.eclipse-mirror',	bundle_version, release_from_branch,		'clean'),
	Repository.new(virgo_eclipse_repo_root, 'util',						paths['util'],					'org.eclipse.virgo.util',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'test',						paths['test'],					'org.eclipse.virgo.test',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'medic',					paths['medic'],					'org.eclipse.virgo.medic',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root,	 'nano',					paths['nano'],					'org.eclipse.virgo.nano',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
	Repository.new(virgo_eclipse_repo_root, 'artifact-repository',		paths['artifact-repository'],	'org.eclipse.virgo.repository',		bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'kernel',					paths['kernel'],				'org.eclipse.virgo.kernel',			bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'kernel-tools',				paths['kernel-tools'],			'org.eclipse.virgo.kernel-tools',	bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'web',						paths['web'],					'org.eclipse.virgo.web',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'snaps',					paths['snaps'],					'org.eclipse.virgo.snaps',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'apps',						paths['apps'],					'org.eclipse.virgo.apps',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'documentation',			paths['documentation'],			'org.eclipse.virgo.documentation',	bundle_version, release_from_branch,		'clean clean-integration doc-html package publish-ivy publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'web-server',				paths['web-server'],			'org.eclipse.virgo.web-server',		bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'jetty-server',				paths['jetty-server'],			'org.eclipse.virgo.jetty-server',	bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
  ]

else

  ALL_REPOS = [
	Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',		paths['eclipse-mirror'],		'org.eclipse.virgo.eclipse-mirror',		bundle_version, release_from_branch,		'clean'),
	Repository.new(virgo_eclipse_repo_root, 'util',					paths['util'],					'org.eclipse.virgo.util',				bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'test',					paths['test'],					'org.eclipse.virgo.test',				bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'medic',				paths['medic'],					'org.eclipse.virgo.medic',				bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'artifact-repository',	paths['artifact-repository'],	'org.eclipse.virgo.repository',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root,	 'nano',				paths['nano'],					'org.eclipse.virgo.nano',				bundle_version, release_from_branch,		 'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
	Repository.new(virgo_eclipse_repo_root, 'artifact-repository',	paths['artifact-repository'],	'org.eclipse.virgo.repository',			bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'kernel',				paths['kernel'],				'org.eclipse.virgo.kernel',				bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'kernel-tools',			paths['kernel-tools'],			'org.eclipse.virgo.kernel-tools',		bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'web',					paths['web'],					'org.eclipse.virgo.web',				bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'snaps',				paths['snaps'],					'org.eclipse.virgo.snaps',				bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'apps',					paths['apps'],					'org.eclipse.virgo.apps',				bundle_version, release_from_branch,		default_targets),
	Repository.new(virgo_eclipse_repo_root, 'documentation',		paths['documentation'],			'org.eclipse.virgo.documentation',		bundle_version, release_from_branch,		'clean clean-integration doc-html package publish-ivy publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'web-server',			paths['web-server'],			'org.eclipse.virgo.web-server',			bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
	Repository.new(virgo_eclipse_repo_root, 'jetty-server',			paths['jetty-server'],			'org.eclipse.virgo.jetty-server',		bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
  ]

end

log_file=File.expand_path('./release.log')
start_time = Time.new
accumulate_versions = Hash.new
console = Console.new

begin

  ALL_REPOS.each do |repo|
	puts 'Releasing ' + repo.name
	puts '    checkout with "' + repo.clone_command + '"' if DRY_RUN
	console.set_title(SCRIPT_NAME, "#{repo.name} Checkout")
	repo.checkout(true)
	if DRY_RUN
	  puts "  Create Release branch " + args[:version] + ", " + args[:build_stamp] + ", " + args[:release_type]
	  puts "	using versions: "
	  accumulate_versions.sort.each {|keyval| puts "	  " + keyval[0] + " = " + keyval[1]}
	  if !args[:build_version].nil?
		puts '	updating Virgo Build to \'' + args[:build_version] + '\''
	  end
	  puts "  Building " + repo.name
	  puts "  Create tag " + repo.bundle_version
	  puts "  Update Master branch " + args[:new_version]
	else
	  console.set_title(SCRIPT_NAME, "#{repo.name} Create release branch")
	  if repo.name == 'gemini-web-container'
		repo.create_release_branch(args[:gemini_version], args[:gemini_build_stamp], args[:gemini_release_type], accumulate_versions)
	  else
		repo.create_release_branch(args[:version], args[:build_stamp], args[:release_type], accumulate_versions)
	  end
	  if !args[:build_version].nil?
		console.set_title(SCRIPT_NAME, "#{repo.name} Update Virgo build")
		repo.update_virgo_build(args[:build_version])
	  end
	  console.set_title(SCRIPT_NAME, "#{repo.name} Build")
	  repo.build(args[:remote_user], log_file)
	  console.set_title(SCRIPT_NAME, "#{repo.name} Create tag")
	  repo.create_tag
	  console.set_title(SCRIPT_NAME, "#{repo.name} Update master branch")
	  if repo.name == 'gemini-web-container'
		repo.update_master_branch(args[:gemini_new_version], accumulate_versions)
	  else
		repo.update_master_branch(args[:new_version], accumulate_versions)
	  end
	end
	accumulate_versions = (repo.versions).merge(accumulate_versions)
  end

  console.set_title(SCRIPT_NAME, "Push?")

  if !DRY_RUN
	puts 'Execution Time: ' + Time.at(Time.new - start_time).utc.strftime('%R:%S')
	puts ''

	print 'Do you want to push? (y/n) '
	commit_ok = STDIN.gets.chomp
	if commit_ok =~ /y.*/
	  ALL_REPOS.each do |repo|
		console.set_title(SCRIPT_NAME, "#{repo.name} Push")
		if repo.name == 'gemini-web-container'
		  repo.push(args[:gemini_new_version])
		else
		  repo.push(args[:new_version])
		end
	  end
	end
  end

  console.clear_title

rescue
  console.set_title(SCRIPT_NAME, "Error")
end

