class Pushapp::Git

Public Instance Methods

update_tracked_repos(config) click to toggle source
# File lib/pushapp/git.rb, line 5
def update_tracked_repos config
  refs         = required_refs(config)
  current_refs = current_refs(config)

  new_refs    = new_refs(refs, current_refs)
  old_refs    = old_refs(refs, current_refs)

  new_refs.each do |r|
    Pushapp::Pipe.run("git config --add remote.#{r[0]}.url #{r[1]}")
  end

  old_refs.each do |r|
    Pushapp::Pipe.run("git config --unset remote.#{r[0]}.url #{r[1]}")
  end
end

Private Instance Methods

current_refs(config) click to toggle source
# File lib/pushapp/git.rb, line 35
def current_refs config
  output = Pipe.capture('git remote -v')

  refs     = required_refs(config)
  remotes  = refs.map {|r| r[0]}.uniq
  
  current_refs = output.lines.map do |l|
    l.gsub(/\s\(.*\)?\Z/, "").chomp
  end
  current_refs = current_refs.uniq.map { |line| line.split(/\t/) }
  current_refs.select {|r| remotes.include?(r[0])}
end
new_refs(refs, cur_refs) click to toggle source
# File lib/pushapp/git.rb, line 23
def new_refs refs, cur_refs
  refs.select do |r|
    cur_refs.all? {|cr| r != cr }
  end
end
old_refs(refs, cur_refs) click to toggle source
# File lib/pushapp/git.rb, line 29
def old_refs refs, cur_refs
  cur_refs.select do |cr|
    refs.all? {|r| r != cr }
  end
end
required_refs(config) click to toggle source
# File lib/pushapp/git.rb, line 48
def required_refs config
  refs = []
  config.remotes.each do |r|
    refs << [r.group, r.location] if r.group
    refs << [r.full_name, r.location]
  end
  refs
end