class Quaker::GitResolver

Public Instance Methods

find_dir_for_repo(repo) click to toggle source
# File lib/quaker/git_resolver.rb, line 20
def find_dir_for_repo repo
  dir = Dir.glob('*')
    .select {|f| File.directory? f}
    .select {|subdir|
      _stdin, stdout, _stderr = Open3.popen3("cd #{subdir} && git remote -v | awk '{print $2}'")
      stdout.each_line
        .map(&:strip)
        .map {|l| parse_url(l) }
        .include?(parse_url(repo))
    }
    .first
  return nil unless dir
  "./#{dir}"
end
parse_url(url) click to toggle source

Parses repository url to { username: …, repository: …}

# File lib/quaker/git_resolver.rb, line 7
def parse_url url
  begin
    uri = GitCloneUrl.parse(url)

    if uri.path.match(/^\/?(.*?)\/(.*?)(.git)?$/)
      return { username: $1, repo: $2 }
    end
  rescue URI::InvalidComponentError
    $stderr.puts "ERROR: Invalid git url: #{url}"
  end
  url
end
resolve(services_map) click to toggle source
# File lib/quaker/git_resolver.rb, line 35
def resolve services_map
  for _, spec in services_map
    git_repo = spec.delete("git")
    next unless git_repo

    dir = find_dir_for_repo git_repo

    $stderr.puts "ERROR: Unable to find dir for repo #{git_repo}" and return unless dir

    spec["build"] = dir
  end
  services_map
end