class Stencil::Merge

Public Class Methods

template(path, push) click to toggle source
# File lib/stencil/merge.rb, line 5
def template(path, push)
  Cmd.run(path, "git fetch --all")

  Branches.grouped(path).each do |merger, mergees|
    progressive_merge(path, merger, mergees, push)
  end
  
  Cmd.run(path, "git checkout master")
end

Private Class Methods

checkout(path, branch) click to toggle source
# File lib/stencil/merge.rb, line 17
def checkout(path, branch)
  locals  = Branches.read(path, :local)
  remotes = Branches.read(path, :remote)

  if locals.include?(branch)
    Cmd.run(path, "git checkout #{branch}")
  elsif remotes.include?(branch)
    Cmd.run(path, "git checkout -t origin/#{branch}")
  end
end
progressive_merge(path, merger, mergees, push) click to toggle source
# File lib/stencil/merge.rb, line 28
def progressive_merge(path, merger, mergees, push)
  branches = Branches.read(path)
  return unless branches.include?(merger)

  unless mergees.empty?
    checkout(path, merger)
    Cmd.run(path, "git pull origin #{merger}")
  end

  mergees = mergees.sort_by { |k, v| k }
  mergees.each do |(mergee, mergee_mergees)|
    mergee = "#{merger}-#{mergee}" unless merger == 'master'

    next unless branches.include?(mergee)

    checkout(path, mergee)
    Cmd.run(path, "git merge #{merger}")
    Cmd.run(path, "git push origin #{mergee}") if push
    
    progressive_merge(path, mergee, mergee_mergees, push)
  end
end