Class: Feature::Land

Inherits:
Object
  • Object
show all
Includes:
Feature
Defined in:
lib/straight_line/common/feature/land.rb

Overview

Merges the feature to master and pushes it

Instance Method Summary collapse

Methods included from Feature

#changes_committed?, #current_feature

Constructor Details

#initializeLand

Returns a new instance of Land.

Raises:



13
14
15
16
17
18
19
20
21
# File 'lib/straight_line/common/feature/land.rb', line 13

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

Instance Method Details

#land(_args = {}) ⇒ Object



23
24
25
26
27
28
29
30
31
# File 'lib/straight_line/common/feature/land.rb', line 23

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

#merge_feature_to_master(feature_name) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/straight_line/common/feature/land.rb', line 33

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

#merge_master_to_feature(feature_name) ⇒ Object



43
44
45
46
47
48
49
50
51
52
# File 'lib/straight_line/common/feature/land.rb', line 43

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

#pull_request_closed?(feature_name) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
57
# File 'lib/straight_line/common/feature/land.rb', line 54

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