35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
# File 'lib/cocoapods-tools/command/git/merge.rb', line 35
def run
super
return
working_dir = Pathname.pwd
g = Git.open(working_dir)
current_branch = g.current_branch
puts Color.color_text "当前分支: #{current_branch}", Color.red
business_branches = %w[/keep/ /voiceroom/ /live/ /vip/]
is_business_branch = false
business_name = ''
business_version = ''
business_branches.each do |business|
next unless current_branch.include?(business)
business_version = current_branch.split(business).last
business_branch = (business_version.gsub '.', '').to_i
unless business_branch.is_a?(Numeric)
puts Color.color_text '非业务线版本分支,停止合并操作', Color.red
return
end
is_business_branch = true
business_name = business
remote_branches = g.branches.remote.select { |bran| bran.name.include? business }
remote_branches.each do |bran|
version = (bran.name.split(business).last.gsub! '.', '').to_i
if version.is_a?(Numeric) && version > business_branch
puts Color.color_text '非业务线最新版本分支,停止合并操作', Color.red
return
end
end
break
end
unless is_business_branch
puts Color.color_text '非业务线分支,停止合并操作', Color.red
return
end
puts Color.color_text "#{business_name.gsub! '/', ''} 业务线最新分支为:#{business_version}", Color.green
business_version.join('.') unless business_version.include? '.'
develop_branch = "develop/#{business_version}"
need_merges = []
success_merges = []
change_components = []
File.open('Demo/Podfile').each do |line|
current_branch_without_dot = current_branch.gsub '.', ''
unless !(line.include? '#') && ((line.include? current_branch) || (line.include? current_branch_without_dot))
next
end
params = line.split ','
name = (params.first.split '\'').last
url = (params[1].split '\'').last
branch = (params[2].strip.split '\'').last
change_components.append(Component.new(name, url, branch))
end
component = Component.new('Test2', 'ssh://git@git', '466')
[component].each do |component|
component_parent_path = '../iOSLib'
FileUtils.makedirs(component_parent_path) unless File.exists? component_parent_path
Dir.chdir(component_parent_path) do
unless File.exists? component.component_name
Git.clone(component.component_url, component.component_name, branch: component.component_branch)
end
Dir.chdir(component.component_name) do
component_git = Git.open('./')
feature_branch_name = component.component_branch
component_git.checkout(feature_branch_name)
remote_develop_branch = component_git.branches["origin/#{develop_branch}"]
component_git.branch(develop_branch).checkout
['origin/master', "origin/#{feature_branch_name}"].each do |branch|
puts Color.color_text "=======开始合并 #{component.component_name} 组件 #{branch} 分支=======", Color.green
merge_result = system("git merge #{branch} -m '合并组件分支'")
if remote_develop_branch.nil? system("git push --set-upstream origin #{develop_branch}")
puts Color.color_text "#{component.component_name} 组件 #{branch} 分支合并成功!", Color.green
success_merges.append("#{component.component_name}-#{branch}")
elsif merge_result system("git push origin #{develop_branch}")
puts Color.color_text "#{component.component_name} 组件 #{branch} 分支合并成功!", Color.green
success_merges.append("#{component.component_name}-#{branch}")
else abort_result = system('git merge --abort')
if abort_result
puts Color.color_text "#{component.component_name} 组件 #{branch} 分支存在冲突,请手动合并!", Color.red
need_merges.append("#{component.component_name}-#{branch}")
else
puts Color.color_text "#{component.component_name} 组件 #{branch} 无变更,不需要合并!", Color.green
end
end
end
end
end
puts '==============合并结果=============='
puts Color.color_text "合并成功:#{success_merges}", Color.green
puts Color.color_text "需要手动合并:#{need_merges}", Color.red
puts '==================================='
end
end
|