class FlashFlow::BranchMerger

Attributes

conflict_sha[R]
resolutions[R]
result[R]

Public Class Methods

new(git, branch) click to toggle source
# File lib/flash_flow/branch_merger.rb, line 6
def initialize(git, branch)
  @git = git
  @branch = branch
end

Public Instance Methods

do_merge(rerere_forget) click to toggle source
# File lib/flash_flow/branch_merger.rb, line 11
def do_merge(rerere_forget)
  if sha.nil?
    @result = :deleted
    return
  end

  @git.run("merge --no-ff #{@git.remote}/#{@branch.ref}")

  if @git.last_success? || try_rerere(rerere_forget)
    @result = :success
  else
    @conflict_sha = merge_rollback
    @result = :conflict
  end
end
sha() click to toggle source
# File lib/flash_flow/branch_merger.rb, line 27
def sha
  @sha if defined?(@sha)
  @sha = get_sha
end

Private Instance Methods

get_sha() click to toggle source
# File lib/flash_flow/branch_merger.rb, line 43
def get_sha
  @git.run("rev-parse #{@git.remote}/#{@branch.ref}")
  @git.last_stdout.strip if @git.last_success?
end
merge_rollback() click to toggle source
# File lib/flash_flow/branch_merger.rb, line 48
def merge_rollback
  @git.run("reset --hard HEAD")
  @git.run("rev-parse HEAD")
  @git.last_stdout.strip
end
try_rerere(rerere_forget) click to toggle source
# File lib/flash_flow/branch_merger.rb, line 34
def try_rerere(rerere_forget)
  if rerere_forget
    @git.run('rerere forget')
    false
  else
    @resolutions = @git.rerere_resolve!
  end
end