Sha256: 490323729701b3e5cf183d0ff485282d88e03613ebcbcd3243bdb5ff05dbc52e

Contents?: true

Size: 1.86 KB

Versions: 3

Compression:

Stored size: 1.86 KB

Contents

require 'straight_line/common/feature'
require 'straight_line/common/git_commands/merge'
require 'straight_line/common/git_commands/commit'
require 'straight_line/common/git_commands/pull'
require 'straight_line/common/git_commands/push'
require 'straight_line/common/util'
require 'straight_line/common/github'

module Feature
  # Merges the feature to master and pushes it
  class Land
    include Feature
    def initialize
      if current_feature == 'master'
        raise UserError,
              'Failed to create diff: you\'re on the master branch'
      end
      return if changes_committed?
      raise UserError,
            'Commit your changes before creating a diff'
    end

    def land(_args = {})
      feature_name = current_feature
      merge_master_to_feature(feature_name)
      GitCommands::Push.new(feature_name).run
      merge_feature_to_master(feature_name)
      GitCommands::Push.new(feature_name, delete: true).run
      Command.new('git checkout master').run
      Util.logger.info 'Changes landed to master, on master branch now.'
    end

    def merge_feature_to_master(feature_name)
      if pull_request_closed?(feature_name)
        Util.logger.info %(#{feature_name} was merged in github.
          You're repo is up-to-date with remote)
      else
        GitCommands::Merge.new('master', feature_name).run
        GitCommands::Push.new('master').run
      end
    end

    def merge_master_to_feature(feature_name)
      GitCommands::Pull.new('master').run
      GitCommands::Merge.new(feature_name, 'master').run

      begin
        GitCommands::Commit.new("Merge master into #{feature_name}", '').run
      rescue StandardError => e
        raise e unless e.message =~ /nothing to commit/
      end
    end

    def pull_request_closed?(feature_name)
      p = Github.pull_request_for_feature feature_name
      p.nil? || p.state == 'closed'
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
straight_line-0.1.4.0 lib/straight_line/common/feature/land.rb
straight_line-0.1.3.0 lib/straight_line/common/feature/land.rb
straight_line-0.1.2.0 lib/straight_line/common/feature/land.rb