cocoapods-bb-PodAssistant 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/cocoapods-bb-PodAssistant/command/stable/init.rb +5 -12
- data/lib/cocoapods-bb-PodAssistant/command/stable/sync.rb +0 -25
- data/lib/cocoapods-bb-PodAssistant/command/stable/update.rb +14 -3
- data/lib/cocoapods-bb-PodAssistant/config/cache_path.rb +7 -1
- data/lib/cocoapods-bb-PodAssistant/config/source_manager.rb +44 -18
- data/lib/cocoapods-bb-PodAssistant/gem_version.rb +1 -1
- data/lib/cocoapods-bb-PodAssistant/helpers/pod_module_helper.rb +6 -1
- data/lib/cocoapods-bb-PodAssistant/helpers/stable_env_helper.rb +60 -6
- data/lib/cocoapods-bb-PodAssistant/source_provider_hook.rb +3 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95c6d433814654744108bb1b8d1051ac00b37dff52e8d0c73fbb03bbb7d67d52
|
4
|
+
data.tar.gz: d804e3f603a8ed9e8612fb4edf6c5ed19ae543d2328dfaf92bf335664f0da421
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75858bf2163338409042d5e4be54e38d6c08a8ea93df77341870af4a0425bd1dc9a1b8a905376775b958318b554b537d4a0b9ad0f822f92d67ed53b82d0ccf04
|
7
|
+
data.tar.gz: 8216d2c5d5df66e7ff8526ae9394ba0a11c1391ac3f6c835e997458417aacab84d3372b346f9caaa565f087679448d094719c5b80ad48c29aeb04de1ed4691d6
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'cocoapods-bb-PodAssistant/config/source_manager'
|
2
|
-
require 'cocoapods-bb-PodAssistant/helpers/stable_env_helper'
|
3
2
|
|
4
3
|
module Pod
|
5
4
|
class Command
|
@@ -18,17 +17,11 @@ module Pod
|
|
18
17
|
|
19
18
|
def run
|
20
19
|
# verify_podfile_exists!
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
# 生成本地yml配置
|
27
|
-
source_manager.generate_localStable
|
28
|
-
puts "[PodAssistant] `pod stable init` complete!".green
|
29
|
-
else
|
30
|
-
puts "[PodAssistant] ❌工程没有配置stable环境".red
|
31
|
-
end
|
20
|
+
source_manager = BB::SourceManager.new()
|
21
|
+
puts "[PodAssistant] 开始配置生成当前项目yml文件".yellow
|
22
|
+
# 生成本地yml配置
|
23
|
+
source_manager.generate_localStable
|
24
|
+
puts "[PodAssistant] `pod stable init` complete!".green
|
32
25
|
end
|
33
26
|
|
34
27
|
end
|
@@ -7,10 +7,6 @@ module Pod
|
|
7
7
|
class Command
|
8
8
|
class Stable < Command
|
9
9
|
class Sync < Stable
|
10
|
-
require 'fileutils'
|
11
|
-
require 'cocoapods/executable.rb'
|
12
|
-
extend Executable
|
13
|
-
executable :git
|
14
10
|
|
15
11
|
self.summary = '[同步远端yml配置] sync a Stable yml config file'
|
16
12
|
|
@@ -26,31 +22,10 @@ module Pod
|
|
26
22
|
puts "开始合并远端stable yml数据".yellow
|
27
23
|
# 数据合并
|
28
24
|
source_manager = BB::SourceManager.new()
|
29
|
-
fetch_stale_git
|
30
25
|
source_manager.merge_stable_data
|
31
26
|
puts "[PodAssistant] `pod stable sync` complete! Please execute the [pod install/ pod update] command".green
|
32
27
|
end
|
33
28
|
|
34
|
-
# 拉取stable仓库代码 ruby脚本内部调用
|
35
|
-
def clone_stable_git
|
36
|
-
cache = BB::Cache.new()
|
37
|
-
cachePath = cache.cachePath
|
38
|
-
configGitPath(cachePath)
|
39
|
-
unless Dir.exist?(File.join(cachePath))
|
40
|
-
clonePath = File.dirname(cachePath)
|
41
|
-
FileUtils.mkdir_p clonePath
|
42
|
-
git_clone(@stable_source,clonePath)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def fetch_stale_git
|
47
|
-
clone_stable_git
|
48
|
-
# git操作
|
49
|
-
git_reset
|
50
|
-
git_fetch
|
51
|
-
git_checkout_and_pull(@stable_source, @stable_branch, @stable_tag)
|
52
|
-
end
|
53
|
-
|
54
29
|
end
|
55
30
|
end
|
56
31
|
end
|
@@ -21,26 +21,37 @@ module Pod
|
|
21
21
|
|
22
22
|
def self.options
|
23
23
|
[
|
24
|
-
|
24
|
+
['--sync', '立即同步远端yml配置,更新组件信息'],
|
25
25
|
].concat(super)
|
26
26
|
end
|
27
27
|
|
28
28
|
def initialize(argv)
|
29
29
|
@pods = argv.arguments!
|
30
|
+
@sync = argv.flag?('sync')
|
30
31
|
super
|
31
|
-
|
32
32
|
end
|
33
33
|
|
34
34
|
def run
|
35
35
|
puts "[PodAssistant] 开始执行 $ pod stable update".yellow
|
36
|
+
# system "git checkout Podfile.lock"
|
37
|
+
source_manager = BB::SourceManager.new()
|
36
38
|
# verify_podfile_exists! # 系统提供api验证podfile是否ok
|
39
|
+
if @sync
|
40
|
+
puts "[PodAssistant] 需要同步组件信息#{@pods}".green
|
41
|
+
source_manager.merge_stable_data(@pods)
|
42
|
+
end
|
43
|
+
podStartTime = Time.new
|
37
44
|
if @pods.any?
|
38
45
|
pods_str = @pods.join(" ")
|
39
46
|
system "pod update #{pods_str}"
|
40
47
|
else
|
41
48
|
system "pod update"
|
42
49
|
end
|
43
|
-
|
50
|
+
podEndTime = Time.new
|
51
|
+
# 获取时间差
|
52
|
+
time = podEndTime - podStartTime
|
53
|
+
puts "[PodAssistant] pod update操作总耗时【#{time.to_s.send(:red)}秒】start:#{podStartTime} end:#{podEndTime}".green
|
54
|
+
|
44
55
|
source_manager.update_local_stable_from_podmodules(@pods)
|
45
56
|
puts "[PodAssistant] `pod stable update` complete!".green
|
46
57
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'cocoapods-bb-PodAssistant/config/stable_source'
|
2
|
+
require 'cocoapods-bb-PodAssistant/helpers/pod_utils'
|
2
3
|
|
3
4
|
module BB
|
4
5
|
class Cache
|
@@ -7,10 +8,15 @@ module BB
|
|
7
8
|
stable_source = StableSource.stable_default_source
|
8
9
|
end
|
9
10
|
@stable_source = stable_source
|
11
|
+
@bundleId = BB::PodUtils.getProjectBundleIdentifier
|
12
|
+
if @bundleId.nil?
|
13
|
+
@bundleId = 'stable'
|
14
|
+
end
|
10
15
|
end
|
11
16
|
|
12
17
|
def cachePath()
|
13
|
-
|
18
|
+
# 缓存路径采用bundle包名区分,解决多产品同时打包问题
|
19
|
+
File.join(File.expand_path('~/.cache'), 'cocoapods-bb-PodAssistant',@bundleId,@stable_source.split('/').last.chomp('.git').to_s)
|
14
20
|
end
|
15
21
|
end
|
16
22
|
end
|
@@ -9,6 +9,7 @@ module BB
|
|
9
9
|
class SourceManager
|
10
10
|
def initialize()
|
11
11
|
env = BB::StableEnv.new()
|
12
|
+
# puts "SourceManager env:#{env}".red
|
12
13
|
@businessSpecName = env.business_stable
|
13
14
|
@stableMgr = BB::StableManager.new()
|
14
15
|
end
|
@@ -93,10 +94,10 @@ module BB
|
|
93
94
|
localSpec.writeData(local_stable_yaml, stable_lock)
|
94
95
|
end
|
95
96
|
|
96
|
-
# 合并stable
|
97
|
-
def merge_stable_data()
|
97
|
+
# 合并stable数据,参数,支持传入更新某几个数据
|
98
|
+
def merge_stable_data(update_pods=[])
|
98
99
|
#4、show origin_stable_lock diff with local_stable_lock
|
99
|
-
new_stable_spec = compare_specs(fetch_local_stable_datas, fetch_origin_stable_datas)
|
100
|
+
new_stable_spec = compare_specs(fetch_local_stable_datas, fetch_origin_stable_datas, update_pods)
|
100
101
|
|
101
102
|
#5、rewirte local_stable_lock with origin_stable_lock
|
102
103
|
update_localstable_datas(new_stable_spec)
|
@@ -122,8 +123,8 @@ module BB
|
|
122
123
|
return result
|
123
124
|
end
|
124
125
|
|
125
|
-
# compare specs 参数1:本地,参数2
|
126
|
-
def compare_specs(local_specs, common_specs)
|
126
|
+
# compare specs 参数1:本地,参数2:远端,参数3:指定更新pod库
|
127
|
+
def compare_specs(local_specs, common_specs, update_pods=[])
|
127
128
|
added_projects = []
|
128
129
|
updated_projects = []
|
129
130
|
rollbacked_projects = []
|
@@ -146,15 +147,15 @@ module BB
|
|
146
147
|
elsif local_version != version
|
147
148
|
# puts "merge name:#{name} local_version:#{local_version} route_version:#{version}".red
|
148
149
|
# 版本不一致
|
149
|
-
if (version.is_a? String) && (local_version.is_a? String)
|
150
|
-
end
|
151
|
-
if versionGreat(version, local_version)
|
152
|
-
updated_projects << "【#{name}】 (#{local_version}) -> (#{version.to_s.send(:yellow)})"
|
153
|
-
else
|
154
|
-
rollbacked_projects << "【#{name}】 (#{version.to_s.send(:red)}) <- (#{local_version})"
|
155
|
-
end
|
156
150
|
podCoreName = subspec_podname(name)
|
157
|
-
|
151
|
+
if (update_pods.length == 0) || (update_pods.include?(podCoreName))
|
152
|
+
if versionGreat(version, local_version)
|
153
|
+
updated_projects << "【#{name}】 (#{local_version}) -> (#{version.to_s.send(:yellow)})"
|
154
|
+
else
|
155
|
+
rollbacked_projects << "【#{name}】 (#{version.to_s.send(:red)}) <- (#{local_version})"
|
156
|
+
end
|
157
|
+
need_update_pod_lists[podCoreName] = version
|
158
|
+
end
|
158
159
|
end
|
159
160
|
end
|
160
161
|
# 解决subspec组件同步更新版本信息
|
@@ -175,16 +176,20 @@ module BB
|
|
175
176
|
end
|
176
177
|
local_exist_ver = new_specs[name]
|
177
178
|
if local_exist_ver.nil?
|
178
|
-
|
179
|
-
|
179
|
+
if (update_pods.length == 0) || (update_pods.include?(name))
|
180
|
+
new_specs[name] = version
|
181
|
+
added_projects << "【#{name}】 (#{version.to_s.send(:green)})"
|
182
|
+
end
|
180
183
|
end
|
181
184
|
if array.is_a?(Array)
|
182
185
|
array.each do |name|
|
183
186
|
name = name.to_s
|
184
187
|
local_exist_ver = new_specs[name]
|
185
188
|
if local_exist_ver.nil?
|
186
|
-
|
187
|
-
|
189
|
+
if (update_pods.length == 0) || (update_pods.include?(name))
|
190
|
+
new_specs[name] = version
|
191
|
+
added_projects << "【#{name}】 (#{version.to_s.send(:green)})"
|
192
|
+
end
|
188
193
|
end
|
189
194
|
end
|
190
195
|
end
|
@@ -192,7 +197,6 @@ module BB
|
|
192
197
|
# step.3 匹配组件移除
|
193
198
|
removedata.each do |name|
|
194
199
|
name = name.to_s
|
195
|
-
# local_exist_ver = new_specs[name]
|
196
200
|
version = listdata[name]
|
197
201
|
if version
|
198
202
|
deleted_projects << "【#{name}】 (#{"delete".send(:red)}) <- (#{version})"
|
@@ -244,6 +248,8 @@ module BB
|
|
244
248
|
lockfile = podfile_lock
|
245
249
|
local_specs = {}
|
246
250
|
dependencies = lockfile.dependencies
|
251
|
+
pod_names = lockfile.pod_names
|
252
|
+
# dependencies依赖数据
|
247
253
|
dependencies.each do | dependency |
|
248
254
|
pod_name = dependency.name
|
249
255
|
if has_include_subspec(pod_name)
|
@@ -251,6 +257,7 @@ module BB
|
|
251
257
|
else
|
252
258
|
podCoreName = pod_name
|
253
259
|
end
|
260
|
+
# puts "podCoreName:#{podCoreName} pod_name:#{pod_name}".red
|
254
261
|
if dependency.external_source.is_a? Hash
|
255
262
|
# 指向分支
|
256
263
|
external_source = dependency.external_source
|
@@ -273,6 +280,25 @@ module BB
|
|
273
280
|
end
|
274
281
|
end
|
275
282
|
end
|
283
|
+
# 被依赖数据
|
284
|
+
pod_names.each do | pod_name |
|
285
|
+
if has_include_subspec(pod_name)
|
286
|
+
podCoreName = subspec_podname(pod_name)
|
287
|
+
else
|
288
|
+
podCoreName = pod_name
|
289
|
+
end
|
290
|
+
pod = local_specs[podCoreName]
|
291
|
+
# puts "podCoreName:#{podCoreName} pod:#{pod}".green
|
292
|
+
if pod.nil?
|
293
|
+
# 指向标签版本
|
294
|
+
version = lockfile.version(pod_name).to_s
|
295
|
+
if !version.empty? && !local_specs.has_key?(podCoreName)
|
296
|
+
local_specs[podCoreName] = version
|
297
|
+
# puts "[标签] #{podCoreName} => (#{version})".yellow
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
276
302
|
# Pod::UI.puts "yml配置数据:#{local_specs}"
|
277
303
|
if local_specs.length > 0
|
278
304
|
update_localstable_datas(local_specs)
|
@@ -158,6 +158,10 @@ module BB
|
|
158
158
|
need_update_pod_data={}
|
159
159
|
stable_hash = local_stable_data
|
160
160
|
podfile_hash.each do |podName,podfile_pod|
|
161
|
+
if podfile_pod.count == 0
|
162
|
+
puts "❌ podfile组件配置异常,请确认:method => REMOTE_VERSION是否配置\n组件信息如下:\n#{podName} => #{podfile_pod}".red
|
163
|
+
exit
|
164
|
+
end
|
161
165
|
podCoreName = @source_manager.subspec_podname(podName)
|
162
166
|
if (podName == podCoreName) || @source_manager.has_pod_subspec(podName, podCoreName)
|
163
167
|
pod = stable_hash[podCoreName]
|
@@ -165,7 +169,8 @@ module BB
|
|
165
169
|
need_update_pod_data[podName] = podfile_pod
|
166
170
|
else
|
167
171
|
# if podCoreName == 'BBGameModule'
|
168
|
-
#
|
172
|
+
# succ = (pod == podfile_pod) ? true : false
|
173
|
+
# puts "[stable]podCoreName:#{podCoreName}(#{pod}) VS [podfile] podName:#{podName}(#{podfile_pod}) succ:#{succ}".green
|
169
174
|
# end
|
170
175
|
if pod == podfile_pod
|
171
176
|
if podName != podCoreName
|
@@ -7,6 +7,11 @@ module BB
|
|
7
7
|
configGitPath(@cache.cachePath)
|
8
8
|
# 自动加载stable环境
|
9
9
|
loadStaleEnv
|
10
|
+
if verify_stable_env_exists == false
|
11
|
+
puts "[PodAssistant] ❌工程没有配置stable环境".red
|
12
|
+
else
|
13
|
+
fetch_stale_git # 自动拉取远端git仓库数据
|
14
|
+
end
|
10
15
|
end
|
11
16
|
|
12
17
|
# stable 环境,执行pod stable
|
@@ -36,15 +41,31 @@ module BB
|
|
36
41
|
def system_clone_stable_git
|
37
42
|
cachePath = @cache.cachePath
|
38
43
|
puts "hook [pod install/update] fetch stable git=>#{cachePath}"
|
39
|
-
if Dir.exist?(File.join(cachePath))
|
40
|
-
# `cd #{cachePath}; git switch main; git pull --all`
|
41
|
-
system "cd #{cachePath}; git switch main; git pull --all"
|
42
|
-
else
|
44
|
+
if !Dir.exist?(File.join(cachePath))
|
43
45
|
clonePath = File.dirname(cachePath)
|
44
46
|
FileUtils.mkdir_p clonePath
|
45
|
-
# `git clone #{@stable_source} #{cachePath}`
|
46
47
|
system "git clone #{@stable_source} #{cachePath}"
|
47
48
|
end
|
49
|
+
if verify_branch_exists
|
50
|
+
if stable_tag || stable_branch
|
51
|
+
if stable_branch
|
52
|
+
system "cd #{cachePath}; git checkout #{stable_branch}; git reset --hard origin/#{stable_branch}"
|
53
|
+
end
|
54
|
+
if stable_tag
|
55
|
+
system "cd #{cachePath}; git checkout #{stable_tag};"
|
56
|
+
end
|
57
|
+
else
|
58
|
+
result =`git symbolic-ref refs/remotes/origin/HEAD`
|
59
|
+
protechBranch = result.split("/").last.strip || default_branch
|
60
|
+
system "cd #{cachePath}; git checkout #{protechBranch}; git reset --hard origin/#{protechBranch}"
|
61
|
+
end
|
62
|
+
else
|
63
|
+
puts "❌ stable配置无效分支信息source:#{@stable_source} branch:#{stable_branch}".red
|
64
|
+
exit
|
65
|
+
end
|
66
|
+
end
|
67
|
+
def fetch_stale_git
|
68
|
+
system_clone_stable_git
|
48
69
|
end
|
49
70
|
|
50
71
|
# ========podfile 约定函数规则,切勿修改
|
@@ -56,13 +77,19 @@ module BB
|
|
56
77
|
end
|
57
78
|
@stable_tag = options[:tag] if options.has_key?(:tag)
|
58
79
|
@stable_branch = options[:branch] if options.has_key?(:branch)
|
59
|
-
puts "###stable env => [stable公共源]:#{source} [业务线源名称]:#{@businessSpec} branch:#{@stable_branch} tag:#{@stable_tag}".
|
80
|
+
puts "###stable env => [stable公共源]:#{source} [业务线源名称]:#{@businessSpec} branch:#{@stable_branch} tag:#{@stable_tag}".green
|
60
81
|
end
|
61
82
|
|
62
83
|
def stable_source
|
63
84
|
return @stable_source
|
64
85
|
end
|
86
|
+
def default_branch
|
87
|
+
return "main"
|
88
|
+
end
|
65
89
|
def stable_branch
|
90
|
+
if @stable_branch.nil?
|
91
|
+
return default_branch
|
92
|
+
end
|
66
93
|
return @stable_branch
|
67
94
|
end
|
68
95
|
def stable_tag
|
@@ -75,5 +102,32 @@ module BB
|
|
75
102
|
def verify_stable_env_exists
|
76
103
|
return @stable_source.empty? ? false : true
|
77
104
|
end
|
105
|
+
# tag是否存在
|
106
|
+
def verify_tag_exists
|
107
|
+
tag = stable_tag
|
108
|
+
if tag
|
109
|
+
cachePath = @cache.cachePath
|
110
|
+
# result = system "cd #{cachePath}; git tag"
|
111
|
+
result = `cd #{cachePath}; git tag`
|
112
|
+
puts "verify_tag_exists:#{result}".red
|
113
|
+
return result.split("\n").include?(tag)
|
114
|
+
end
|
115
|
+
return false
|
116
|
+
end
|
117
|
+
# 分支是否存在
|
118
|
+
def verify_branch_exists
|
119
|
+
branch = stable_branch
|
120
|
+
if branch
|
121
|
+
cachePath = @cache.cachePath
|
122
|
+
# result = system "cd #{cachePath}; git tag"
|
123
|
+
branchs = `cd #{cachePath}; git branch -a`
|
124
|
+
if branchs
|
125
|
+
branchs = branchs.split("\n")
|
126
|
+
return branchs.include?(branch) || branchs.include?(' remotes/origin/' + branch) || branchs.include?('remotes/origin/' + branch)
|
127
|
+
end
|
128
|
+
puts "verify_branch_exists:#{branchs}".red
|
129
|
+
end
|
130
|
+
return false
|
131
|
+
end
|
78
132
|
end
|
79
133
|
end
|
@@ -42,6 +42,7 @@ end
|
|
42
42
|
|
43
43
|
$podStartTime = 0
|
44
44
|
$podEndTime = 0
|
45
|
+
$source_manager = nil
|
45
46
|
|
46
47
|
module BB
|
47
48
|
|
@@ -49,8 +50,7 @@ module BB
|
|
49
50
|
begin
|
50
51
|
$podStartTime = Time.new
|
51
52
|
puts "[PodAssistant] plugin hook pre_install".yellow
|
52
|
-
|
53
|
-
env.system_clone_stable_git # 自动拉取远端git仓库数据
|
53
|
+
$source_manager = BB::SourceManager.new() # 自动拉取远端git仓库数据
|
54
54
|
if $pluginIsVerbose == true
|
55
55
|
# home路径下是否存在.AllPodsTimeAndSize.csv的隐藏文件
|
56
56
|
if File.exist?("#{Dir.home}/.AllPodsTimeAndSize.csv")
|
@@ -68,9 +68,8 @@ module BB
|
|
68
68
|
end
|
69
69
|
Pod::HooksManager.register("cocoapods-bb-PodAssistant", :post_install) do |installer|
|
70
70
|
begin
|
71
|
-
source_manager = BB::SourceManager.new()
|
72
71
|
# 生成本地yml配置
|
73
|
-
source_manager.generate_localStable
|
72
|
+
$source_manager.generate_localStable
|
74
73
|
$podEndTime = Time.new
|
75
74
|
puts "[PodAssistant] plugin hook post_install".yellow
|
76
75
|
puts "[PodAssistant] pod库下载耗时 GitCloneAllSize: #{$gitAllSize} M GitCloneAllTime: #{$cloneAllTime} S CDNDownloadAllSize: #{$pluginCurrentZipAllSize} M CDNAllTime: #{$downloadAllTime} S CDNDownloadAllTime: #{$cdnDownloadAllTime} S CDNUnzipAllTime: #{$cdnUnZipAllTime} S"
|