Sha256: 4370e1b9d9bb563ebf08560fa13f8f84e92461bdf4a86a031fc1338627ac7383

Contents?: true

Size: 1.19 KB

Versions: 4

Compression:

Stored size: 1.19 KB

Contents

require 'contracts'
require 'rugged'

module Workspace
  include Contracts

  Contract String => Bool
  def self.git_repository?(path)
    true if Rugged::Repository.new path
  rescue Rugged::OSError, Rugged::RepositoryError
    false
  end

  Contract String, String, String => Any
  def self.configure_remotes(path, origin_url, upstream_url)
    repository = Rugged::Repository.new path
    repository.remotes.set_url 'origin', origin_url
    repository.remotes.set_url 'upstream', upstream_url
  end

  Contract String, String => Any
  def self.clone(url, path)
    credentials = Rugged::Credentials::SshKeyFromAgent.new username: 'git'
    Rugged::Repository.clone_at(url, path, credentials: credentials) unless git_repository? path
  rescue Rugged::NetworkError
    Announce.failure "Failed to clone repository #{url} to path #{path}"
  end

  Contract ArrayOf[Hash] => Any
  def self.setup(repositories)
    progress = ProgressBar.new repositories.length
    repositories.each do |repo|
      path = "#{Settings.workspace}/#{repo[:origin][:name]}"
      clone repo[:origin][:ssh_url], path
      configure_remotes path, repo[:origin][:ssh_url], repo[:upstream][:ssh_url]
      progress.increment!
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
git-ready-0.8.8 lib/git-ready/workspace.rb
git-ready-0.8.7 lib/git-ready/workspace.rb
git-ready-0.8.6 lib/git-ready/workspace.rb
git-ready-0.8.5 lib/git-ready/workspace.rb