Sha256: b08254473d6a8a3ed611c6ce83767e13bd6a32e50c71f1a18e1ec5dad510b3fc

Contents?: true

Size: 1.56 KB

Versions: 2

Compression:

Stored size: 1.56 KB

Contents

module GitPrettyAccept
  class Transaction
    include Methadone::CLILogging

    attr_reader :branch, :let_user_edit_message, :enable_autosquash

    def initialize(branch, options = {})
      @branch = branch
      @let_user_edit_message = options[:edit]
      @enable_autosquash = options[:autosquash]
    end

    def commands
      [
        "git fetch origin",
        "git rebase origin/#{source_branch}",
        "echo 'Confirming that #{source_branch} is not ahead of origin/#{source_branch}...'",
        "test `git rev-parse HEAD` = `git rev-parse origin/#{source_branch}`",
        "git checkout #{branch}",
        "git rebase origin/#{branch}",
        "git rebase origin/#{source_branch} #{autosquash_params}",
        "git push --force origin #{branch}",
        "git checkout #{source_branch}",
        MergeCommand.new(branch, let_user_edit_message).to_s,
        "git push origin #{source_branch}",
        "git branch -d #{branch}",
        "git push origin :#{branch}"
      ]
    end

    def call
      commands.each_with_index do |command, i|
        info "\n#{command}"
        unless system(command)
          error "\nDue to the error above, " +
            "the following commands were not executed: " +
            commands[i + 1, commands.size].join("\n")
          exit!
        end
      end
    end

    def source_branch
      return @source_branch if @source_branch
      our = Git.open('.')
      @source_branch = our.branches.find(&:current).to_s
    end

    private

    def autosquash_params
      enable_autosquash ? '-i --autosquash' : ''
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
git_pretty_accept-1.0.0 lib/git_pretty_accept/transaction.rb
git_pretty_accept-0.5.0 lib/git_pretty_accept/transaction.rb