podsorz 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,13 @@
1
+ module GitConfig
2
+ #App 当前版本
3
+ APP_RELEASE_VERSION = "2.0.8"
4
+
5
+ #作者姓名xiangqi简写
6
+ BRANCH_AUTHOR_SUFFIX = "xq"
7
+ end
8
+
9
+ #想要开发修改的的Pod
10
+ $FIX_POD_LIST = [
11
+ # "KXModuleOrz",
12
+ # "KXModuleQuestionRepo",
13
+ ]
@@ -0,0 +1,56 @@
1
+ require "podsorz/util/logger"
2
+
3
+ module PodsOrz
4
+ class OrzEnvDetector
5
+
6
+ def check_directory(directoryPath)
7
+ is_directory = File.directory?(directoryPath)
8
+ Logger.error("Detect failure, directory path error: #{directoryPath}") unless is_directory
9
+
10
+ is_directory
11
+ end
12
+
13
+ def detect_podfile(directoryPath)
14
+ podfile_path = File.expand_path("Podfile", directoryPath)
15
+ result = File.exist?(podfile_path)
16
+ unless result
17
+ Logger.warning("Podfile not exist, create empty Podfile")
18
+ IO.popen("cd #{directoryPath};touch Podfile")
19
+ end
20
+ end
21
+
22
+ def detect_podfile_orz(directoryPath)
23
+ podfile_path = File.expand_path("Podfile_orz.rb", directoryPath)
24
+ result = File.exist?(podfile_path)
25
+ unless result
26
+ Logger.error("Podfile_orz.rb not exist, please manual makeup one. Copy content from project Podfile")
27
+ end
28
+
29
+ result
30
+ end
31
+
32
+ def detect_PodsOrzConfig(directoryPath)
33
+ orzconfig_path = File.expand_path("PodsOrzConfig.rb", directoryPath)
34
+ orzconfig_result = File.exist?(orzconfig_path)
35
+
36
+ generate_default_config(orzconfig_path) unless orzconfig_result
37
+ end
38
+
39
+ def generate_default_config(file_path)
40
+ Logger.warning("PodsOrzConfig not exist, generate default config")
41
+ file_name = File.basename(file_path)
42
+ directory = File.dirname(file_path)
43
+ IO.popen("cd #{directory};touch #{file_name}") { |io|
44
+ templet_config_path = File.expand_path("../core/orz_config_templet.rb", File.dirname(__FILE__))
45
+ File.open(templet_config_path, "r") { |templet_file|
46
+ File.open(file_path, "w+") { |file|
47
+ templet_file.readlines.each {|line|
48
+ puts line
49
+ file.write(line)
50
+ }
51
+ }
52
+ }
53
+ }
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,24 @@
1
+ require "podsorz/util/logger"
2
+
3
+
4
+ module PodsOrz
5
+ class PodOrzconfigParse
6
+ attr_accessor :app_release_version, :branch_author_suffix, :fix_pod_list
7
+
8
+ def initialize(main_path)
9
+ orzconfig_path = File.expand_path("PodsOrzConfig.rb", main_path)
10
+ orzconfig_result = File.exist?(orzconfig_path)
11
+
12
+ unless orzconfig_result
13
+ Logger.error("PodsOrzConfig.rb is not found. Please 'podsorz setup' first")
14
+ exit()
15
+ end
16
+
17
+ require orzconfig_path
18
+
19
+ @app_release_version = GitConfig::APP_RELEASE_VERSION
20
+ @branch_author_suffix = GitConfig::BRANCH_AUTHOR_SUFFIX
21
+ @fix_pod_list = $FIX_POD_LIST
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,188 @@
1
+ require "podsorz/util/logger"
2
+ require "podsorz/core/podfile_model"
3
+ require File.expand_path("../core/podfile_model.rb", File.dirname(__FILE__))
4
+
5
+ module PodsOrz
6
+
7
+ class PodfileIO
8
+ attr_accessor :main_path, :total_sentences, :usable_sentences, :total_pod_models
9
+
10
+ def initialize(main_path)
11
+ @main_path = main_path
12
+
13
+ self.parse_podfile_orz
14
+ end
15
+
16
+
17
+ def parse_podfile_orz
18
+ orz_file_path = File.expand_path("Podfile_orz.rb", @main_path)
19
+
20
+ @total_sentences = []
21
+ @usable_sentences = []
22
+ @total_pod_models = []
23
+
24
+ File.open(orz_file_path, "r") { |io|
25
+ @total_sentences = io.readlines
26
+
27
+ @total_sentences.each { |orz_line|
28
+ orz_line_content = orz_line.strip.chomp
29
+ unless orz_line_content.empty? || orz_line_content.size.zero?
30
+ unless orz_line_content.start_with?("#")
31
+ @usable_sentences << orz_line
32
+
33
+ if orz_line_content.start_with?("pod ")
34
+ podfile_model = PodsOrz::PodfileModel.new(orz_line_content)
35
+ @total_pod_models << podfile_model
36
+ end
37
+ end
38
+ end
39
+ }
40
+ }
41
+
42
+ end
43
+
44
+
45
+ def output_local_pod(pod_name_list)
46
+ pod_name_list.each do |podname|
47
+ @total_pod_models.map { |model|
48
+ if model.name.start_with? podname.to_s
49
+ model.path = "../kx_pods/" + podname.to_s
50
+ end
51
+ }
52
+ end
53
+ end
54
+
55
+
56
+ def output_orz_total_sentence(pod_name_list, branch_name)
57
+ pod_name_list.each do |podname|
58
+ @total_pod_models.map { |model|
59
+ if model.name.start_with? podname.to_s
60
+ model.git = "git@gitlab.91banban.com:ios_pods/Pods/" + podname.to_s + ".git"
61
+ model.branch = branch_name.to_s
62
+ end
63
+ }
64
+ end
65
+
66
+ cocoas_podfile_path = File.expand_path("Podfile_orz.rb", @main_path)
67
+
68
+ output_pod_list = @total_pod_models.reject { |model|
69
+ pod_name = model.name
70
+ !pod_name_list.include? pod_name
71
+ }
72
+
73
+ File.open(cocoas_podfile_path, "w+") {|io|
74
+ Logger.highlight("Remote Podfile_orz.rb edite completed!")
75
+
76
+ @total_sentences.each do |sentence|
77
+ sentence_content = sentence.strip.chomp.to_s
78
+
79
+ is_sentence_comtent_empty = sentence_content.empty?
80
+ is_sentence_comtent_size_zero = sentence_content.size.zero?
81
+
82
+ unless is_sentence_comtent_empty || is_sentence_comtent_size_zero
83
+ unless sentence_content.start_with?("#")
84
+
85
+ output_pod_list.each do |model|
86
+ filter_str = "\'#{model.name}\'"
87
+ if sentence.include? filter_str
88
+ splite_list = sentence.split(filter_str)
89
+ sentence = splite_list[0].to_s + filter_str + ", :git => " + "\'#{model.git}\'" + ", :branch => " + "\'#{model.branch}\'"
90
+ if model.configurations
91
+ sentence = sentence + ", :configurations => " + model.configurations.to_s
92
+ end
93
+
94
+ puts(sentence.chomp + "\n")
95
+ end
96
+
97
+ end
98
+ end
99
+ end
100
+ io.write(sentence.chomp + "\n")
101
+ end
102
+ }
103
+
104
+ end
105
+
106
+
107
+ def output_local_total_sentence
108
+ cocoas_podfile_path = File.expand_path("Podfile", @main_path)
109
+
110
+ output_pod_list = @total_pod_models.reject { |model|
111
+ path = model.path
112
+ path.to_s.empty?
113
+ }
114
+
115
+ File.open(cocoas_podfile_path, "w+") {|io|
116
+ Logger.highlight("Local Podfile edite completed!")
117
+
118
+ @usable_sentences.each do |sentence|
119
+ output_pod_list.each do |model|
120
+ filter_str = "\'#{model.name}\'"
121
+ if sentence.include? filter_str
122
+ splite_list = sentence.split(filter_str)
123
+ sentence = splite_list[0].to_s + filter_str + ", :path => " + "\'#{model.path.to_s}\'"
124
+ if model.configurations
125
+ sentence = sentence + ", :configurations => " + model.configurations.to_s
126
+ end
127
+
128
+ sentence = sentence + "\n"
129
+ puts(sentence)
130
+ end
131
+ end
132
+
133
+ io.write(sentence + "\n")
134
+ end
135
+ }
136
+ end
137
+
138
+ def output_publish_total_sentence(pod_hash)
139
+ pod_hash.each { |pod_name, version|
140
+ @total_pod_models.map { |model|
141
+ if model.name.start_with? pod_name.to_s
142
+ model.version = version
143
+ end
144
+ }
145
+ }
146
+
147
+ cocoas_podfile_path = File.expand_path("Podfile_orz.rb", @main_path)
148
+
149
+ output_pod_list = @total_pod_models.reject { |model|
150
+ pod_name = model.name
151
+ !pod_hash.include? pod_name
152
+ }
153
+
154
+ File.open(cocoas_podfile_path, "w+") {|io|
155
+ Logger.highlight("Remote Podfile_orz.rb edite completed!")
156
+
157
+ @total_sentences.each do |sentence|
158
+ sentence_content = sentence.strip.chomp.to_s
159
+
160
+ is_sentence_comtent_empty = sentence_content.empty?
161
+ is_sentence_comtent_size_zero = sentence_content.size.zero?
162
+
163
+ unless is_sentence_comtent_empty || is_sentence_comtent_size_zero
164
+ unless sentence_content.start_with?("#")
165
+
166
+ output_pod_list.each do |model|
167
+ filter_str = "\'#{model.name}\'"
168
+ if sentence.include? filter_str
169
+ splite_list = sentence.split(filter_str)
170
+ sentence = splite_list[0].to_s + filter_str + ", \'#{model.version}\'"
171
+ if model.configurations
172
+ sentence = sentence + ", :configurations => " + model.configurations.to_s
173
+ end
174
+
175
+ puts(sentence.chomp + "\n")
176
+ end
177
+
178
+ end
179
+ end
180
+ end
181
+
182
+ io.write(sentence.chomp + "\n")
183
+ end
184
+ }
185
+ end
186
+
187
+ end
188
+ end
@@ -0,0 +1,34 @@
1
+
2
+ module PodsOrz
3
+
4
+ class PodfileModel
5
+
6
+ attr_accessor :name, :git, :path, :configurations, :branch,:tag, :version
7
+
8
+ def initialize(sentence)
9
+ sentence_slip_list = sentence.split(',')
10
+ return if sentence_slip_list.size.zero?
11
+
12
+ for piece in sentence_slip_list do
13
+ if /:git =>/ =~ piece
14
+ @git = $~.post_match.strip
15
+ elsif /:path =>/ =~ piece
16
+ @path = $~.post_match.strip
17
+ elsif /:configurations =>/ =~ piece
18
+ @configurations = $~.post_match.strip
19
+ elsif /:branch =>/ =~ piece
20
+ @branch = $~.post_match.strip
21
+ elsif /:tag =>/ =~ piece
22
+ @tag = $~.post_match.strip
23
+ elsif /pod /=~ piece
24
+ @name = $~.post_match.delete("'\n ")
25
+ end
26
+ end
27
+
28
+ # puts %Q{model name:#{@name},git:#{@git},path:#{@path},config:#{@configurations},branch:#{@branch},tag:#{@tag}}
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,96 @@
1
+ require "podsorz/core/pod_orzconfig_parse"
2
+ require "podsorz/util/logger"
3
+
4
+ module PodsOrz
5
+ class PodsDetector
6
+ attr_accessor :kx_pods_path, :orzconfig_parse
7
+
8
+ def initialize(main_path)
9
+ @kx_pods_path = File.expand_path("../kx_pods", main_path)
10
+
11
+ detect_kx_pods(main_path)
12
+ @orzconfig_parse = PodsOrz::PodOrzconfigParse.new(main_path)
13
+ end
14
+
15
+ def check_directory(main_path)
16
+ is_directory = File.directory?(main_path)
17
+ Logger.error("Detect failure, it is not a directory path: #{main_path}") unless is_directory
18
+
19
+ is_directory
20
+ end
21
+
22
+ def detect_kx_pods(main_path)
23
+
24
+ result = check_directory(main_path)
25
+
26
+ if result
27
+ pods_result = File.directory?(@kx_pods_path)
28
+ unless pods_result
29
+ Logger.warning("kx_pods directory not exist, generate default 'kx_pods' directory")
30
+ Dir.mkdir(@kx_pods_path)
31
+ end
32
+ end
33
+ end
34
+
35
+ def start_detector()
36
+ if @orzconfig_parse.fix_pod_list.empty?
37
+ Logger.warning("Fix pod list is empty, there is nothings to do, please setup 'FIX_POD_LIST' in \"PodsOrzConfig.rb\"")
38
+ else
39
+ ensure_kxpods_exist()
40
+ end
41
+ end
42
+
43
+ def ensure_kxpods_exist()
44
+ pods_list = @orzconfig_parse.fix_pod_list
45
+ is_clone_success = true
46
+ pods_list.each {|pod|
47
+ command = Thread.new do
48
+ each_result = detect_pod(pod)
49
+ is_clone_success = false unless each_result
50
+ end
51
+
52
+ command.join
53
+ }
54
+
55
+ exit() unless is_clone_success
56
+ end
57
+
58
+ def detect_pod(pod)
59
+ pod_path = File.expand_path(pod, @kx_pods_path)
60
+ result = File.directory?(pod_path)
61
+ if result
62
+ file_entries = Dir.entries(pod_path)
63
+ result = false if file_entries.empty?
64
+ result = false unless file_entries.include?(".git")
65
+
66
+ Logger.error("【#{pod}】 at #{pod_path} exist, but .git not work success, please manual check.") unless result
67
+ else
68
+ result = clone_orz_pod(pod)
69
+ end
70
+
71
+ result
72
+ end
73
+
74
+ def clone_orz_pod(pod)
75
+ is_clone_success = true
76
+ pod_directory = File.expand_path(pod, @kx_pods_path)
77
+
78
+ Logger.default("Start clone 【#{pod}】 Project...")
79
+ git_clone_content = ""
80
+ IO.popen("git clone git@gitlab.91banban.com:ios_pods/Pods/#{pod}.git #{pod_directory}", :err=>[:child, :out]) {|io|
81
+ git_clone_content = io.read
82
+ puts(git_clone_content)
83
+ is_clone_success = false if git_clone_content.to_s.include? "fatal"
84
+ }
85
+
86
+ if is_clone_success
87
+ Logger.highlight("Clone 【#{pod}】 success!")
88
+ else
89
+ Logger.error("Clone 【#{pod}】 failure!")
90
+ end
91
+
92
+ is_clone_success
93
+ end
94
+
95
+ end
96
+ end
@@ -0,0 +1,429 @@
1
+ require "podsorz/core/pod_orzconfig_parse"
2
+ require "podsorz/core/pods_git_operator"
3
+ require "podsorz/core/podfile_io"
4
+ require "podsorz/core/pods_version"
5
+ require "podsorz/core/pods_repo"
6
+ require 'open3'
7
+
8
+ module PodsOrz
9
+ class PodsGitManager
10
+ attr_accessor :main_path, :orzconfig_parse, :pods_git_operator, :podfile_io, :pods_version, :pods_repo
11
+
12
+ def initialize(main_path)
13
+ @orzconfig_parse = PodsOrz::PodOrzconfigParse.new(main_path)
14
+
15
+ kx_pods_path = File.expand_path("../kx_pods", main_path)
16
+ @pods_git_operator = PodsOrz::PodsGitOperator.new(kx_pods_path, @orzconfig_parse.app_release_version, @orzconfig_parse.branch_author_suffix)
17
+
18
+ @podfile_io = PodsOrz::PodfileIO.new(main_path)
19
+ @podfile_io.output_local_pod(@orzconfig_parse.fix_pod_list)
20
+
21
+ @pods_version = PodsOrz::PodsVersion.new(main_path)
22
+
23
+ @pods_repo = PodsOrz::PodsRepo.new()
24
+ end
25
+
26
+ #Switch Command --
27
+
28
+ def switch_develop_state()
29
+ is_switch_success = true
30
+ pods_list = @orzconfig_parse.fix_pod_list
31
+
32
+ pods_list.each {|pod|
33
+ Logger.default("【#{pod}】 begin switch develop...")
34
+
35
+ command = Thread.new do
36
+ each_result = @pods_git_operator.switch_develop_pod(pod)
37
+ is_switch_success = false unless each_result
38
+ end
39
+
40
+ command.join
41
+ Logger.separator
42
+ }
43
+ exit() unless is_switch_success
44
+ end
45
+
46
+ def switch_feature_state()
47
+ is_switch_success = true
48
+ pods_list = @orzconfig_parse.fix_pod_list
49
+ pods_list.each {|pod|
50
+ Logger.default("【#{pod}】 begin switch feature...")
51
+
52
+ command = Thread.new do
53
+ each_result = @pods_git_operator.switch_feature_pod(pod)
54
+ is_switch_success = false unless each_result
55
+ end
56
+
57
+ command.join
58
+ Logger.separator
59
+ }
60
+ exit() unless is_switch_success
61
+ end
62
+
63
+ def switch_release_state()
64
+ is_switch_success = true
65
+ pods_list = @orzconfig_parse.fix_pod_list
66
+ pods_list.each {|pod|
67
+ Logger.default("【#{pod}】 begin switch release...")
68
+
69
+ command = Thread.new do
70
+ each_result = @pods_git_operator.switch_release_pod(pod)
71
+ is_switch_success = false unless each_result
72
+ end
73
+
74
+ command.join
75
+ Logger.separator
76
+ }
77
+ exit() unless is_switch_success
78
+
79
+ end
80
+
81
+ def switch_bugfix_state()
82
+ is_switch_success = true
83
+ pods_list = @orzconfig_parse.fix_pod_list
84
+ pods_list.each {|pod|
85
+ Logger.default("【#{pod}】 begin switch bugfix...")
86
+
87
+ command = Thread.new do
88
+ each_result = @pods_git_operator.switch_bugfix_pod(pod)
89
+ is_switch_success = false unless each_result
90
+ end
91
+
92
+ command.join
93
+ Logger.separator
94
+ }
95
+ exit() unless is_switch_success
96
+ end
97
+
98
+ #Commit Command --
99
+
100
+ def pod_commit(is_push, is_notify)
101
+ is_push_success = true
102
+
103
+ pods_list = @orzconfig_parse.fix_pod_list
104
+ pods_list.each {|pod|
105
+ Logger.default("【#{pod}】 begin commit ...\n")
106
+
107
+ command = Thread.new do
108
+ @pods_git_operator.commit_local(pod)
109
+
110
+ if is_push
111
+ is_push_success = @pods_git_operator.commit_push(pod)
112
+ end
113
+
114
+ if is_notify && is_push_success
115
+ is_push_success = @pods_git_operator.commit_notify(pod)
116
+ end
117
+ end
118
+
119
+ command.join
120
+ Logger.separator
121
+ }
122
+
123
+ exit() unless is_push_success
124
+
125
+ if is_push && is_notify
126
+ update_push_podfile_io
127
+ end
128
+ end
129
+
130
+ def update_push_podfile_io
131
+ branch_name = fetch_pods_branch_name()
132
+
133
+ is_develp = branch_name.include? 'develop'
134
+ is_feature = branch_name.include? 'feature'
135
+ result = "develop" if is_develp || is_feature
136
+
137
+ is_release = branch_name.include? "release"
138
+ is_bugfix = branch_name.include? "bugfix"
139
+ result = "release/" + "#{@orzconfig_parse.app_release_version}" if is_release || is_bugfix
140
+
141
+ @podfile_io.output_orz_total_sentence(@orzconfig_parse.fix_pod_list, result)
142
+ end
143
+
144
+ def fetch_pods_branch_name
145
+ return "" if @orzconfig_parse.fix_pod_list.empty?
146
+
147
+ first_pod = @orzconfig_parse.fix_pod_list.first
148
+
149
+ branch_name = @pods_git_operator.current_pod_branch(first_pod)
150
+
151
+ branch_name
152
+ end
153
+
154
+ def ensure_pods_branch()
155
+ pods_list = @orzconfig_parse.fix_pod_list
156
+
157
+ is_same = true
158
+ branch_name = ""
159
+ output_lines = []
160
+
161
+ pods_list.each do |pod|
162
+ command = Thread.new do
163
+ b_name = @pods_git_operator.current_pod_branch(pod)
164
+ if branch_name.empty?
165
+ branch_name = b_name
166
+ end
167
+
168
+ unless b_name.eql?(branch_name)
169
+ is_same = false
170
+ end
171
+
172
+ output_lines << "'#{pod}' current_branch: #{b_name}"
173
+ end
174
+
175
+ command.join
176
+ end
177
+
178
+ unless is_same
179
+ Logger.error("Fix pod list branch error.Not all pods branch is the same state")
180
+ output_lines.each do |line|
181
+ puts line
182
+ end
183
+ end
184
+
185
+ is_same
186
+ end
187
+
188
+ #Publish Command --
189
+
190
+ def start_repo_publish
191
+ #1.判断 release 是否存在新的commit内容
192
+ newContent_pod_list = filter_newContent_pods()
193
+
194
+ if newContent_pod_list.empty?
195
+ Logger.warning("All pods do not have new content to publish")
196
+ else
197
+ Logger.highlight("Pods have new content to publish ")
198
+ newContent_pod_list.each do |pod|
199
+ puts " - #{pod}"
200
+ end
201
+
202
+ #2.Podspec versoin
203
+ increase_pods_version(newContent_pod_list)
204
+
205
+ #3.Merge into master / develop
206
+ publish_master_develop_branch(newContent_pod_list)
207
+
208
+ #4.Tag
209
+ add_publish_tag(newContent_pod_list)
210
+ end
211
+
212
+ #5.Repo push
213
+ @pods_repo.check_repo_exist
214
+
215
+ pods_repo_push
216
+
217
+ #6.Update Podfile_orz
218
+ update_publish_podfile_orz
219
+ end
220
+
221
+ def filter_newContent_pods()
222
+ newContent_pod_list = []
223
+ #filter action
224
+ pods_list = @orzconfig_parse.fix_pod_list
225
+ pods_list.each {|pod|
226
+ command = Thread.new do
227
+ is_new_publish = @pods_git_operator.has_new_publish(pod)
228
+ newContent_pod_list << pod if is_new_publish
229
+ end
230
+
231
+ command.join
232
+ Logger.separator
233
+ }
234
+
235
+ newContent_pod_list
236
+ end
237
+
238
+ def increase_pods_version(pods_list)
239
+ is_increase_success = true
240
+
241
+ pods_list.each {|pod|
242
+ Logger.default("【#{pod}】start increase podspec version ...\n")
243
+
244
+ command = Thread.new do
245
+ version_number = @pods_version.increase_pod_version(pod)
246
+
247
+ if version_number.empty?
248
+ is_increase_success = false
249
+ @pods_git_operator.clear_modify_pod(pod)
250
+ else
251
+ #3.version update 提交commit
252
+ commit_success = @pods_git_operator.commit_version_increase(pod, version_number)
253
+ unless commit_success
254
+ is_increase_success = false
255
+ @pods_git_operator.clear_modify_pod(pod)
256
+ end
257
+ end
258
+ end
259
+
260
+ command.join
261
+ Logger.separator
262
+ }
263
+
264
+ exit() unless is_increase_success
265
+ end
266
+
267
+ def publish_master_develop_branch(pods_list)
268
+ is_publish_success = true
269
+ pods_list.each {|pod|
270
+ Logger.default("【#{pod}】start merge into master & develop ...\n")
271
+
272
+ command = Thread.new do
273
+ each_result = @pods_git_operator.publish_merge(pod)
274
+ is_publish_success = false unless each_result
275
+ end
276
+
277
+ command.join
278
+ Logger.separator
279
+ }
280
+
281
+ exit() unless is_publish_success
282
+ end
283
+
284
+ def add_publish_tag(pods_list)
285
+ is_add_success = true
286
+ pods_list.each {|pod|
287
+ tag = @pods_version.get_podspec_version(pod)
288
+ if tag.empty?
289
+ is_add_success = false
290
+ exit()
291
+ end
292
+
293
+ Logger.default("【#{pod}】will add tag: #{tag} \n")
294
+
295
+ command = Thread.new do
296
+ each_result = @pods_git_operator.add_pod_tag(pod, tag)
297
+ is_add_success = false unless each_result
298
+ end
299
+
300
+ command.join
301
+ Logger.separator
302
+ }
303
+
304
+ exit() unless is_add_success
305
+ end
306
+
307
+ def delete_publish_tag(pods_list)
308
+ pods_list.each {|pod|
309
+ tag = @pods_version.get_podspec_version(pod)
310
+ if tag.empty?
311
+ exit()
312
+ end
313
+
314
+ Logger.default("【#{pod}】will delete tag: #{tag} \n")
315
+
316
+ command = Thread.new do
317
+ @pods_git_operator.delete_pod_tag(pod, tag)
318
+ end
319
+
320
+ command.join
321
+ Logger.separator
322
+ }
323
+ end
324
+
325
+ def pods_repo_push
326
+ is_push_success = true
327
+
328
+ pods_list = @orzconfig_parse.fix_pod_list
329
+ pods_list.each {|pod|
330
+ Logger.default("【#{pod}】check pod_version, git_tag, remote_version...")
331
+
332
+ command = Thread.new do
333
+ p_version = @pods_version.get_podspec_version(pod)
334
+ if p_version.empty?
335
+ is_push_success = false
336
+ exit()
337
+ end
338
+
339
+ git_tag = @pods_git_operator.get_pod_git_tag(pod)
340
+ local_result = @pods_repo.ensure_local_pod_version_tag(pod, p_version, git_tag)
341
+ case local_result
342
+ when -1
343
+ #error
344
+ is_push_success = false
345
+ exit()
346
+ when 0
347
+ #the same version, push ready
348
+ when 1
349
+ #need add new git tag
350
+ is_add_success = @pods_git_operator.add_pod_tag(pod, p_version)
351
+ end
352
+
353
+ remote_result = @pods_repo.ensure_remote_pod_version(pod, p_version)
354
+ case remote_result
355
+ when -1
356
+ #error
357
+ is_push_success = false
358
+ exit()
359
+ when 0
360
+ #the same version, nothing to update
361
+ when 1
362
+ #update remote
363
+ file_path = @pods_git_operator.get_pod_file_path(pod)
364
+ is_update_success = @pods_repo.push_pod_remote(pod, file_path, p_version)
365
+ unless is_update_success
366
+ delete_tag_list = []
367
+ delete_tag_list << pod
368
+ delete_publish_tag(delete_tag_list)
369
+
370
+ is_push_success = false
371
+ exit()
372
+ end
373
+ end
374
+ end
375
+
376
+ command.join
377
+ Logger.separator
378
+ }
379
+
380
+ exit() unless is_push_success
381
+
382
+ end
383
+
384
+ def update_publish_podfile_orz
385
+ is_update_success = true
386
+ pod_hash = Hash.new()
387
+
388
+ pods_list = @orzconfig_parse.fix_pod_list
389
+ pods_list.each {|pod|
390
+ command = Thread.new do
391
+ pod_version = @pods_version.get_podspec_version(pod)
392
+ if pod_version.empty?
393
+ is_update_success = false
394
+ exit()
395
+ end
396
+
397
+ pod_hash[pod] = pod_version
398
+ end
399
+
400
+ command.join
401
+ }
402
+
403
+ exit() unless is_update_success
404
+
405
+ @podfile_io.output_publish_total_sentence(pod_hash)
406
+ end
407
+
408
+ #Install Command --
409
+
410
+ def install_pod(main_path)
411
+ command = Thread.new do
412
+ @pods_repo.check_repo_exist
413
+ @podfile_io.output_local_total_sentence
414
+ end
415
+
416
+ command.join
417
+
418
+ command = Thread.new do
419
+ Open3.popen3("cd #{main_path};pod update --no-repo-update --verbose") do |stdin , stdout , stderr, wait_thr|
420
+ while line = stdout.gets
421
+ puts line
422
+ end
423
+ end
424
+ end
425
+
426
+ command.join
427
+ end
428
+ end
429
+ end