Class: FlashFlow::Merge::Base
- Inherits:
-
Object
- Object
- FlashFlow::Merge::Base
show all
- Defined in:
- lib/flash_flow/merge/base.rb
Defined Under Namespace
Classes: NothingToMergeError, OutOfSyncWithRemote, UnmergeableBranch, VersionError
Instance Method Summary
collapse
Constructor Details
#initialize(opts = {}) ⇒ Base
Returns a new instance of Base.
Instance Method Details
#check_git_version ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/flash_flow/merge/base.rb', line 50
def check_git_version
git_version = @local_git.version
return if git_version.nil?
running_version = git_version.split(".").map(&:to_i)
expected_version = FlashFlow::GIT_VERSION.split(".").map(&:to_i)
if running_version[0] < expected_version[0] ||
(running_version[0] == expected_version[0] && running_version[1] < expected_version[1]) puts "Warning: Your version of git (#{git_version}) is behind the version that is tested (#{FlashFlow::GIT_VERSION}). We recommend to upgrade to at least #{expected_version[0]}.#{expected_version[1]}.0"
end
end
|
#check_repo ⇒ Object
31
32
33
34
35
|
# File 'lib/flash_flow/merge/base.rb', line 31
def check_repo
if @local_git.staged_and_working_dir_files.any?
raise RuntimeError.new('You have changes in your working directory. Please stash and try again')
end
end
|
#check_version ⇒ Object
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/flash_flow/merge/base.rb', line 37
def check_version
data_version = @data.version
return if data_version.nil?
written_version = data_version.split(".").map(&:to_i)
running_version = FlashFlow::VERSION.split(".").map(&:to_i)
unless written_version[0] < running_version[0] ||
(written_version[0] == running_version[0] && written_version[1] <= running_version[1]) raise RuntimeError.new("Your version of flash flow (#{FlashFlow::VERSION}) is behind the version that was last used (#{data_version}) by a member of your team. Please upgrade to at least #{written_version[0]}.#{written_version[1]}.0 and try again.")
end
end
|
#git_merge(branch) ⇒ Object
74
75
76
77
78
79
80
81
|
# File 'lib/flash_flow/merge/base.rb', line 74
def git_merge(branch)
merger = BranchMerger.new(@git, branch)
forget_rerere = is_working_branch(branch) && @rerere_forget
merger.do_merge(forget_rerere)
merger
end
|
#is_working_branch(branch) ⇒ Object
83
84
85
|
# File 'lib/flash_flow/merge/base.rb', line 83
def is_working_branch(branch)
branch.ref == @git.working_branch
end
|
#merge_branches(branches) ⇒ Object
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/flash_flow/merge/base.rb', line 63
def merge_branches(branches)
ordered_branches = MergeOrder.new(@git, branches).get_order
ordered_branches.each_with_index do |branch, index|
branch.merge_order = index + 1
merger = git_merge(branch)
yield(branch, merger)
end
end
|
#pending_release ⇒ Object
87
88
89
|
# File 'lib/flash_flow/merge/base.rb', line 87
def pending_release
@data.pending_release
end
|
#ready_to_merge_release ⇒ Object
91
92
93
|
# File 'lib/flash_flow/merge/base.rb', line 91
def ready_to_merge_release
@data.ready_to_merge_release
end
|
#release_ahead_of_master? ⇒ Boolean
95
96
97
|
# File 'lib/flash_flow/merge/base.rb', line 95
def release_ahead_of_master?
@git.ahead_of_master?("#{@git.remote}/#{@git.release_branch}")
end
|
#write_data(commit_msg) ⇒ Object
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/flash_flow/merge/base.rb', line 99
def write_data(commit_msg)
@git.in_temp_merge_branch do
@git.run("reset --hard #{@git.remote}/#{@git.merge_branch}")
end
@git.in_merge_branch do
@git.run("reset --hard #{@git.remote}/#{@git.merge_branch}")
end
@data.save!
@git.copy_temp_to_branch(@git.merge_branch, commit_msg)
@git.delete_temp_merge_branch
@git.push(@git.merge_branch, false)
end
|