class Bosh::Cli::Command::Release::ListReleases

Public Instance Methods

list() click to toggle source
# File lib/cli/commands/release/list_releases.rb, line 8
def list
  auth_required
  show_current_state
  releases = director.list_releases.sort do |r1, r2|
    r1['name'] <=> r2['name']
  end

  err('No releases') if releases.empty?

  currently_deployed = false
  uncommited_changes = false
  if releases.first.has_key? 'release_versions'
    releases_table = build_releases_table(releases, options)
    currently_deployed, uncommited_changes = release_version_details(releases)
  elsif releases.first.has_key? 'versions'
    releases_table = build_releases_table_for_old_director(releases)
    currently_deployed, uncommited_changes = release_version_details_for_old_director(releases)
  end

  nl
  say(releases_table.render)

  say('(*) Currently deployed') if currently_deployed
  say('(+) Uncommitted changes') if uncommited_changes
  nl
  say('Releases total: %d' % releases.size)
end

Private Instance Methods

build_releases_table(releases, options = {}) click to toggle source

Builds table of release information Default headings: “Name”, “Versions”, “Commit Hash” Extra headings: options => “Jobs”

# File lib/cli/commands/release/list_releases.rb, line 53
def build_releases_table(releases, options = {})
  show_jobs = options[:jobs]
  table do |t|
    t.headings = 'Name', 'Versions', 'Commit Hash'
    t.headings << 'Jobs' if show_jobs
    releases.each do |release|
      versions, commit_hashes = formatted_versions(release['release_versions']).transpose
      row = [release['name'], versions.join("\n"), commit_hashes.join("\n")]
      if show_jobs
        jobs = formatted_jobs(release).transpose
        row << jobs.join("\n")
      end
      t << row
    end
  end
end
build_releases_table_for_old_director(releases) click to toggle source
# File lib/cli/commands/release/list_releases.rb, line 37
def build_releases_table_for_old_director(releases)
  table do |t|
    t.headings = 'Name', 'Versions'
    releases.each do |release|
      versions = release['versions'].sort { |v1, v2|
        Bosh::Common::Version::ReleaseVersion.parse_and_compare(v1, v2)
      }.map { |v| ((release['in_use'] || []).include?(v)) ? "#{v}*" : v }

      t << [release['name'], versions.join(', ')]
    end
  end
end
formatted_jobs(release) click to toggle source
# File lib/cli/commands/release/list_releases.rb, line 88
def formatted_jobs(release)
  sort_versions(release['release_versions']).map do |v|
    if job_names = v['job_names']
      [job_names.join(', ')]
    else
      ['n/a  '] # with enough whitespace to match "Jobs" header
    end
  end
end
formatted_version_and_commit_hash(version) click to toggle source
# File lib/cli/commands/release/list_releases.rb, line 82
def formatted_version_and_commit_hash(version)
  version_number = version['version'] + (version['currently_deployed'] ? '*' : '')
  commit_hash = version['commit_hash'] + (version['uncommitted_changes'] ? '+' : '')
  [version_number, commit_hash]
end
formatted_versions(release_versions) click to toggle source
# File lib/cli/commands/release/list_releases.rb, line 70
def formatted_versions(release_versions)
  if release_versions.empty?
    [["unknown", "unknown"]]
  else
    sort_versions(release_versions).map { |v| formatted_version_and_commit_hash(v) }
  end
end
release_version_details(releases) click to toggle source
# File lib/cli/commands/release/list_releases.rb, line 99
def release_version_details(releases)
  currently_deployed = false
  uncommitted_changes = false
  releases.each do |release|
    release['release_versions'].each do |version|
      currently_deployed ||= version['currently_deployed']
      uncommitted_changes ||= version['uncommitted_changes']
      if currently_deployed && uncommitted_changes
        return true, true
      end
    end
  end
  return currently_deployed, uncommitted_changes
end
release_version_details_for_old_director(releases) click to toggle source
# File lib/cli/commands/release/list_releases.rb, line 114
def release_version_details_for_old_director(releases)
  currently_deployed = false
  # old director did not support uncommitted changes
  uncommitted_changes = false
  releases.each do |release|
    currently_deployed ||= release['in_use'].any?
    if currently_deployed
      return true, uncommitted_changes
    end
  end
  return currently_deployed, uncommitted_changes
end
sort_versions(versions) click to toggle source
# File lib/cli/commands/release/list_releases.rb, line 78
def sort_versions(versions)
  versions.sort { |v1, v2| Bosh::Common::Version::ReleaseVersion.parse_and_compare(v1['version'], v2['version']) }
end