#!/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 = {
    'osgi-test-stubs' => 'osgi-test-stubs',
    'osgi-extensions' => 'osgi-extensions',
    'util' => 'util',
    'test' => 'test',
    'medic' => 'medic',
    'artifact-repository' => 'artifact-repository',
    'nano' => 'nano',
    '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,  'osgi-test-stubs',         paths['osgi-test-stubs'],       'org.eclipse.virgo.teststubs',      bundle_version, release_from_branch,        default_targets),
    Repository.new(virgo_eclipse_repo_root,  'osgi-extensions',         paths['osgi-extensions'],       'org.eclipse.virgo.osgi',           bundle_version, release_from_branch,        default_targets),
    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,  '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, 'osgi-test-stubs',     paths['osgi-test-stubs'],     'org.eclipse.virgo.teststubs',       bundle_version, release_from_branch, default_targets),
    Repository.new(virgo_eclipse_repo_root, 'osgi-extensions',     paths['osgi-extensions'],     'org.eclipse.virgo.osgi',            bundle_version, release_from_branch, default_targets),
    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, '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, '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, 'osgi-test-stubs',     paths['osgi-test-stubs'],     'org.eclipse.virgo.teststubs',       bundle_version, release_from_branch, default_targets),
    Repository.new(virgo_eclipse_repo_root, 'osgi-extensions',     paths['osgi-extensions'],     'org.eclipse.virgo.osgi',            bundle_version, release_from_branch, default_targets),
    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, '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, 'osgi-test-stubs',     paths['osgi-test-stubs'],     'org.eclipse.virgo.teststubs',       bundle_version, release_from_branch, default_targets),
      Repository.new(virgo_eclipse_repo_root, 'osgi-extensions',     paths['osgi-extensions'],     'org.eclipse.virgo.osgi',            bundle_version, release_from_branch, default_targets),
      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, '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

