class Gitload::RepoChain

Attributes

config[R]
repos[R]

Public Class Methods

new(config, repos = [], options = {}) click to toggle source
# File lib/gitload/repo_chain.rb, line 8
def initialize config, repos = [], options = {}
  @config = config
  @repos = repos
  @rename = options[:rename]
end

Public Instance Methods

<<(repo) click to toggle source
# File lib/gitload/repo_chain.rb, line 14
def << repo
  @repos << repo
  self
end
add(repos) click to toggle source
# File lib/gitload/repo_chain.rb, line 19
def add repos
  # TODO: remove
  repos = repos.repos while repos.respond_to? :repos
  @repos += repos
  self
end
by(*owners) click to toggle source
# File lib/gitload/repo_chain.rb, line 26
def by *owners
  normalized_owners = owners.collect{ |owner| owner.to_s.downcase }
  select{ |repo| normalized_owners.include? repo.owner.to_s.downcase }
end
clone() click to toggle source
# File lib/gitload/repo_chain.rb, line 73
def clone
  clone_into
end
clone_into(dest = nil) click to toggle source
# File lib/gitload/repo_chain.rb, line 81
def clone_into dest = nil
  clone_repos :into, dest
end
clone_to(dest = nil) click to toggle source
# File lib/gitload/repo_chain.rb, line 77
def clone_to dest = nil
  clone_repos :to, dest
end
forks() click to toggle source
# File lib/gitload/repo_chain.rb, line 51
def forks
  select &:fork?
end
from(*sources) click to toggle source
# File lib/gitload/repo_chain.rb, line 31
def from *sources
  select{ |repo| sources.include? repo.source }
end
named(*criteria) click to toggle source
# File lib/gitload/repo_chain.rb, line 35
def named *criteria
  compiled_criteria = criteria.collect do |criterion|
    if criterion.kind_of? Regexp
      Proc.new{ |repo| repo.name.match criterion }
    else
      Proc.new{ |repo| repo.name.downcase == criterion.to_s.downcase }
    end
  end

  select do |repo|
    compiled_criteria.any? do |criterion|
      criterion.call repo
    end
  end
end
prefix(prefix) click to toggle source
# File lib/gitload/repo_chain.rb, line 68
def prefix prefix
  @prefix = prefix
  self
end
reject(&block) click to toggle source
# File lib/gitload/repo_chain.rb, line 59
def reject &block
  dup @repos.reject(&block)
end
rename(pattern = nil, replacement = nil, &block) click to toggle source
# File lib/gitload/repo_chain.rb, line 63
def rename pattern = nil, replacement = nil, &block
  @rename_block = block || Proc.new{ |name| name.sub pattern, replacement }
  self
end
select(&block) click to toggle source
# File lib/gitload/repo_chain.rb, line 55
def select &block
  dup @repos.select(&block)
end

Private Instance Methods

clone_repos(method, dest) click to toggle source
# File lib/gitload/repo_chain.rb, line 93
def clone_repos method, dest
  dest = if !dest
    File.expand_path(root.to_s)
  elsif root
    File.expand_path(dest.to_s, File.expand_path(root.to_s))
  else
    File.expand_path(dest.to_s)
  end

  puts dest
  dir = File.dirname dest
  #FileUtils.mkdir_p unless File.exists? dir

  @repos.each do |repo|

    repo_dest = if method == :into
      name = repo.name
      name = name.index(@prefix) == 0 ? name : "#{@prefix}#{name}" if @prefix
      name = @rename_block.call name if @rename_block
      File.join dest, name
    else
      dest
    end

    repo.clone_to repo_dest, @config.clone_options
  end
end
dup(repos = nil) click to toggle source
# File lib/gitload/repo_chain.rb, line 89
def dup repos = nil
  RepoChain.new @config, repos || @repos, rename: @rename
end