module Git::Multi::Report

Constants

ARROW
CROSS
TICK

Public Instance Methods

for(*multi_repos) click to toggle source
# File lib/git/multi/report.rb, line 58
def for(*multi_repos)
  multi_repos.each do |multi_repo|
    case (user = org = project = multi_repo)
    when *USERS
      owner_status("user \"#{user}\"", Git::Multi::WORKAREA, user)
    when *ORGANIZATIONS
      owner_status("org \"#{org}\"", Git::Multi::WORKAREA, org)
    when *SUPERPROJECTS
      project_status("superproject \"#{project}\"", project)
    else
      raise ArgumentError, multi_repo
    end
  end
end
home_status(home) click to toggle source
# File lib/git/multi/report.rb, line 10
def home_status(home)
  directory_status(['${HOME}', home], home)
end
owner_status(message, workarea, owner) click to toggle source
# File lib/git/multi/report.rb, line 18
def owner_status(message, workarea, owner)
  directory_status(
    [
      message,
      File.join(abbreviate(workarea, :workarea), owner),
    ],
    File.join(workarea, owner)
  )

  github_count = Git::Multi.repositories_for(owner).count
  cloned_count = Git::Multi.cloned_repositories_for(owner).count
  missing_count = (github_count - cloned_count)
  subdir_count = Dir.new(workarea).git_repos(owner).count
  surplus_count = (subdir_count - cloned_count)

  setting_status(["\tGitHub ", "#{github_count} repositories"])
  setting_status(["\tcloned ", cloned_count, "(#{missing_count} missing)"])
  Git::Multi.missing_repositories_for(owner).each do |missing|
    setting_status(["\tmissing", missing.full_name], false, false)
  end
  setting_status(["\tsubdirs", subdir_count, "(#{surplus_count} surplus)"])
end
project_status(message, superproject) click to toggle source
# File lib/git/multi/report.rb, line 41
def project_status(message, superproject)
  github_count = Git::Multi.repositories_for(superproject).count

  if github_count.zero?
    setting_status([message, 'listed but not configured'], false, false)
  else
    setting_status([message], true)
    Git::Multi.repositories_for(superproject).each do |repo|
      if File.directory? repo.local_path
        setting_status(["\tcloned ", repo.full_name], true)
      else
        setting_status(["\tmissing", repo.full_name], false, false)
      end
    end
  end
end
workarea_status(workarea) click to toggle source
# File lib/git/multi/report.rb, line 14
def workarea_status(workarea)
  directory_status(['${WORKAREA}', abbreviate(workarea, :home)], workarea)
end

Private Instance Methods

abbreviate(directory, root_dir = nil) click to toggle source
# File lib/git/multi/report.rb, line 94
                     def abbreviate(directory, root_dir = nil)
  case root_dir
  when :home
    directory.gsub(Git::Multi::HOME, '${HOME}')
  when :workarea
    directory.gsub(Git::Multi::WORKAREA, '${WORKAREA}')
  else
    abbreviate(abbreviate(directory, :workarea), :home)
  end
end
describe(token) click to toggle source
# File lib/git/multi/report.rb, line 73
                     def describe(token)
  if token.nil?
    '(nil)'
  elsif token.empty?
    '(empty)'
  else
    "#{'*' * 36}#{token[36..]}"
  end
end
directory_status(messages, directory) click to toggle source
# File lib/git/multi/report.rb, line 123
                     def directory_status(messages, directory)
  setting_status(
    messages,
    directory && !directory.empty? && File.directory?(directory),
    false
  )
end
file_status(file, message = 'File') click to toggle source
# File lib/git/multi/report.rb, line 111
                     def file_status(file, message = 'File')
  setting_status(
    [
      message,
      abbreviate(file),
      File.file?(file) ? "#{File.size(file).commify} bytes" : nil,
    ],
    file && !file.empty? && File.file?(file),
    false
  )
end
setting_status(messages, valid = false, optional = true) click to toggle source
# File lib/git/multi/report.rb, line 105
                     def setting_status(messages, valid = false, optional = true)
  fields = messages.compact.join(' - ')
  icon = valid ? TICK : optional ? ARROW : CROSS
  puts "#{icon}  #{fields}"
end
symbolize(token) click to toggle source
# File lib/git/multi/report.rb, line 83
                     def symbolize(token)
  case token
  when Git::Multi.env_var('OCTOKIT_ACCESS_TOKEN')
    '${OCTOKIT_ACCESS_TOKEN}'
  when Git::Multi.global_option('github.token')
    'github.token'
  else
    '(unset)'
  end
end