cocoapods-bb-PodAssistant 0.1.5

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.
Files changed (33) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +48 -0
  4. data/lib/cocoapods-bb-PodAssistant/babybus/business/babybus_install_environment.rb +129 -0
  5. data/lib/cocoapods-bb-PodAssistant/babybus/helpers/babybus_info_plist_helper.rb +92 -0
  6. data/lib/cocoapods-bb-PodAssistant/babybus/installer/post_install_hooks.rb +111 -0
  7. data/lib/cocoapods-bb-PodAssistant/command/PodAssistant.rb +44 -0
  8. data/lib/cocoapods-bb-PodAssistant/command/linkline/linkline.rb +68 -0
  9. data/lib/cocoapods-bb-PodAssistant/command/linkline/target-linkline.rb +9 -0
  10. data/lib/cocoapods-bb-PodAssistant/command/linkline/targetValidator-linkline.rb +25 -0
  11. data/lib/cocoapods-bb-PodAssistant/command/linkline/targetdefinition-linkline.rb +37 -0
  12. data/lib/cocoapods-bb-PodAssistant/command/stable/podfile-linkline.rb +9 -0
  13. data/lib/cocoapods-bb-PodAssistant/command/stable/stable.rb +168 -0
  14. data/lib/cocoapods-bb-PodAssistant/command.rb +9 -0
  15. data/lib/cocoapods-bb-PodAssistant/config/cache_path.rb +16 -0
  16. data/lib/cocoapods-bb-PodAssistant/config/source_manager.rb +389 -0
  17. data/lib/cocoapods-bb-PodAssistant/config/stable_source.rb +7 -0
  18. data/lib/cocoapods-bb-PodAssistant/config/stable_specs.rb +27 -0
  19. data/lib/cocoapods-bb-PodAssistant/gem_version.rb +3 -0
  20. data/lib/cocoapods-bb-PodAssistant/helpers/git_cmd_helper.rb +73 -0
  21. data/lib/cocoapods-bb-PodAssistant/helpers/pod_module_helper.rb +246 -0
  22. data/lib/cocoapods-bb-PodAssistant/helpers/pod_utils.rb +128 -0
  23. data/lib/cocoapods-bb-PodAssistant/helpers/stable_env_helper.rb +36 -0
  24. data/lib/cocoapods-bb-PodAssistant/helpers/stable_manager_helper.rb +85 -0
  25. data/lib/cocoapods-bb-PodAssistant/helpers/yaml_files_helper.rb +72 -0
  26. data/lib/cocoapods-bb-PodAssistant/helpers.rb +6 -0
  27. data/lib/cocoapods-bb-PodAssistant/podfile.rb +392 -0
  28. data/lib/cocoapods-bb-PodAssistant/source_provider_hook.rb +335 -0
  29. data/lib/cocoapods-bb-PodAssistant.rb +1 -0
  30. data/lib/cocoapods_plugin.rb +9 -0
  31. data/spec/command/PodAssistant_spec.rb +12 -0
  32. data/spec/spec_helper.rb +50 -0
  33. metadata +132 -0
@@ -0,0 +1,73 @@
1
+ # cache stable
2
+
3
+ ######################################## Git Command ########################################
4
+ def configGitPath(gitPath)
5
+ @gitPath = gitPath
6
+ end
7
+
8
+ def git_cmd(*args)
9
+ Dir.chdir(File.join(@gitPath)) {
10
+ return git! args
11
+ }
12
+ end
13
+
14
+ def git_reset
15
+ git_cmd('reset','--hard') #fommate git command
16
+ end
17
+
18
+ def git_fetch
19
+ git_cmd('fetch') #fommate git command
20
+ end
21
+
22
+ def git_pull
23
+ # git_cmd('pull','--all') #fommate git command
24
+ end
25
+ def git_checkout_and_pull(stable_source, stable_branch = nil, stable_tag = nil)
26
+ # puts "spec source:#{stable_source} branch:#{stable_branch} tag:#{stable_tag}"
27
+ if stable_branch || stable_tag
28
+ if stable_branch
29
+ unless git_branch_exists?(stable_branch)
30
+ err_msg = "- Error: #{stable_source} did not exit branch #{stable_branch}"
31
+ Pod::UI.puts "#{err_msg}".send(:red)
32
+ exit -9006
33
+ end
34
+ git_cmd('checkout',stable_branch) #fommate git command
35
+ git_cmd('reset','--hard',"origin/#{stable_branch}") #fommate git command
36
+ end
37
+ if stable_tag
38
+ unless git_tag_exists?(stable_tag)
39
+ err_msg = "- Error: #{stable_source} did not exit tag #{stable_tag}"
40
+ Pod::UI.puts "#{err_msg}".send(:red)
41
+ exit -9007
42
+ end
43
+
44
+ git_cmd('checkout',stable_tag) #fommate git command
45
+ end
46
+ else
47
+ protechBranch = git_cmd('symbolic-ref','refs/remotes/origin/HEAD').split("/").last.strip || "main"
48
+ git_cmd('checkout',protechBranch)
49
+ git_cmd('reset','--hard',"origin/#{protechBranch}") #fommate git command
50
+ end
51
+ end
52
+
53
+ def git_tag_exists?(tag)
54
+ if tag
55
+ git_cmd('tag').split("\n").include?(tag)
56
+ end
57
+ return true
58
+ end
59
+
60
+ def git_branch_exists?(branch)
61
+ if branch
62
+ branchs = git_cmd('branch','-a').split("\n")
63
+ branchs.include?(branch) || branchs.include?(' remotes/origin/' + branch) || branchs.include?('remotes/origin/' + branch)
64
+ end
65
+ return true
66
+ end
67
+
68
+ def git_clone(source, path)
69
+ puts "git clone source:#{source} path:#{path}"
70
+ UI.section("Cloning `#{source}` into `#{path}`.") do
71
+ Dir.chdir(path) { git! ['clone', source] } #origin git command
72
+ end
73
+ end
@@ -0,0 +1,246 @@
1
+ require 'cocoapods-bb-PodAssistant/config/source_manager'
2
+
3
+ module BB
4
+ class PodModule
5
+ # 全部项目配置 => { 全部项目配置 }
6
+ @@all_modules = [
7
+ ]
8
+
9
+ # 个人项目配置 => { 门牌 => { 项目名称, 获取方式, 分支,目标, 版本,} } 匹配全部项目配置 个人配置替换全局配置
10
+ @@member_modules = {
11
+ }
12
+
13
+ # 成员配置 => { 门牌 => { 项目名称, 获取方式, 分支,目标, 版本,} } 匹配全部项目配置 个人配置替换全局配置
14
+ @@member_configs = [
15
+ ]
16
+
17
+ def initialize(all_modules, member_modules, member_configs, ignore_local_stable = false)
18
+ @source_manager = BB::SourceManager.new()
19
+ #加载远程稳定仓库 和本地podfile 指定的仓库进行合并
20
+ @@all_modules = load_stable_specs_to_podfile(all_modules, ignore_local_stable)
21
+ @@member_modules = member_modules
22
+ @@member_configs = member_configs
23
+ # puts "member_modules:#{member_modules}"
24
+ end
25
+
26
+ def current_member
27
+ if @@member_configs
28
+ @@member_configs.each do | c |
29
+ if c[:pathes]
30
+ c[:pathes].each do | p |
31
+ if File.exist?(p)
32
+ return c
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ return { :name => :podbox_member, :force_local => false, }
40
+ end
41
+
42
+ def current_member_modules
43
+ @current_member = self.current_member
44
+ @current_member_modules = []
45
+ if @@member_modules[current_member[:name]]
46
+ @@member_modules[current_member[:name]].each do | m |
47
+ if m[:inhibit_warnings] == nil
48
+ m[:inhibit_warnings] = true
49
+ end
50
+ @current_member_modules << m
51
+ end
52
+ end
53
+ return @current_member_modules
54
+ end
55
+
56
+ def current_all_modules
57
+ return @@all_modules
58
+ end
59
+
60
+
61
+ ################################# linkline stable ����� #################################
62
+ # 格式化podfile 中的specs
63
+ #[
64
+ # { names: "BBGlobalMainModule", version: "1.1.1", method: REMOTE_TAG },
65
+ # { names: "xxxx", version: "1.1.2", method: REMOTE_TAG }
66
+ #]
67
+ def format_podfile_specs(pods)
68
+ pods.flat_map do |spec|
69
+ spec[:names].map do |name|
70
+ spec.dup.tap { |s| s[:names] = [name] }
71
+ end
72
+ end
73
+ end
74
+
75
+ # 合并stable和podfile 中的specs! ⚠️podfile 中的组件会覆盖stable 中的!
76
+ # 比如stable 中AFNetworking 指向标签1.1,而 podfile中AFNetworking 指向develop,那么最终AFNetworking 会指向develop
77
+ def load_stable_specs_to_podfile(podfile_specs, ignore_local_stable = false)
78
+ puts "[PodAssistant] start process pod module...".yellow
79
+ local_stable_data = @source_manager.fetch_local_stable_datas # 本地stable配置
80
+ if (local_stable_data.is_a? Hash) && !local_stable_data.empty?
81
+ return merge_module_data(podfile_specs, local_stable_data)
82
+ else
83
+ if !ignore_local_stable
84
+ puts "❌ 没有配置pod stable环境!!! 请先执行`pod stable --init`初始化,再执行pod in/up操作".red
85
+ exit
86
+ end
87
+ end
88
+ return format_podfile_specs(podfile_specs)
89
+ end
90
+ # 转化数据to hash
91
+ def convert_podfile_specs_data(podfile_specs)
92
+ podfile_hash = {}
93
+ podfile_specs.each { |pod|
94
+ # 对现有pod支持格式进行解析
95
+ names = pod[:names]
96
+ version = pod[:version]
97
+ method = pod[:method]
98
+ branch = pod[:branch]
99
+ git = pod[:git]
100
+ git_format = pod[:git_format]
101
+ commit = pod[:commit]
102
+ linkages = pod[:linkages]
103
+ linkage = pod[:linkage]
104
+ if (names.is_a? Array) && !names.empty?
105
+ data = {}
106
+ if version
107
+ data[:version] = version
108
+ end
109
+ if method
110
+ data[:method] = method
111
+ end
112
+ if branch
113
+ data[:branch] = branch
114
+ end
115
+ if git
116
+ data[:git] = git
117
+ end
118
+ if git_format
119
+ if git_format.include?("{git_name}")
120
+ data[:git_format] = git_format
121
+ else
122
+ data[:git] = git_format
123
+ end
124
+ end
125
+ if commit
126
+ data[:commit] = commit
127
+ end
128
+ if linkages
129
+ data[:linkages] = linkages
130
+ end
131
+ if linkage
132
+ data[:linkage] = linkage
133
+ end
134
+ names.each do |pod_name|
135
+ podfile_hash[pod_name] = data
136
+ end
137
+ end
138
+ }
139
+ return podfile_hash
140
+ end
141
+ def merge_module_data(podfile_specs, local_stable_data)
142
+ # puts "podfile_specs: #{podfile_specs}".green
143
+ podfile_hash = convert_podfile_specs_data(podfile_specs)
144
+ # puts "podfile_hash: #{podfile_hash}".red
145
+ # puts "local_stable_data: #{local_stable_data}".red
146
+ need_update_pod_data={}
147
+ podfile_hash.each do |podName,pod|
148
+ local_pod_data = local_stable_data[podName]
149
+ if pod != local_pod_data
150
+ branch = pod[:branch]
151
+ git_format = pod[:git_format]
152
+ version = pod[:version]
153
+ podCoreName = @source_manager.subspec_podname(podName)
154
+ # puts "podName:#{podName} pod:#{pod} branch:#{branch} git_format:#{git_format} version:#{version} local_pod_data:#{local_pod_data}".green
155
+ if (branch && !branch.empty?) || (git_format && !git_format.empty?)
156
+ # 项目配置指向分支数据,以本项目为主
157
+ puts "[PodAssistant] #{podName} 指向分支数据 => #{pod}"
158
+ need_update_pod_data[podCoreName] = pod
159
+ end
160
+ # succ = (version && !version.empty? && (local_pod_data.is_a? String) && (version != local_pod_data) && !version.include?(local_pod_data))
161
+ # puts "podName:#{podName} version:#{version} succ=#{succ}".red
162
+ if (version && !version.empty? && (local_pod_data.is_a? String) && (version != local_pod_data) && !version.include?(local_pod_data))
163
+ version = version.lstrip # 去除首字母空格
164
+ initial_str = version[0..0] # 第一个字母
165
+ # 项目配置固定版本,以本项目为主
166
+ is_fixed_version = initial_str.include?('=') ? true : false # 固定版本 pod 'A','= x.x.x'
167
+ is_lessthan_version = version.include?('<') ? true : false # 限制《最高》组件版本 pod 'A','< x.x.x' 或者 pod 'A','<= x.x.x'
168
+ is_greaterthan_version = version.include?('>') ? true : false # 限制《最低》组件版本 pod 'A','> x.x.x' 或者 pod 'A','>= x.x.x'
169
+ is_fuzzy_version = version.include?('~>') ? true : false # 固定版本 pod 'A','~> x.x.x'
170
+ is_fuzzy_versionV2 = (!is_fixed_version && !is_lessthan_version && !is_greaterthan_version && !is_fuzzy_version) ? true : false # 固定版本 pod 'A','x.x.x'
171
+ if (is_fixed_version == true) || (is_lessthan_version == true) || (is_fuzzy_version == true) || (is_fuzzy_versionV2 == true)
172
+ puts "[PodAssistant] ⚠️ 限制组件版本 '#{podName}', '#{version}' 以项目配置为主. (最新版本=> #{local_pod_data.send(:red)})"
173
+ need_update_pod_data[podCoreName] = version
174
+ end
175
+ end
176
+ end
177
+ end
178
+ if need_update_pod_data.count > 0
179
+ # puts "need_update_pod_data:#{need_update_pod_data}".green
180
+ # 规避指向分支/远端版本替换yml配置所有组件,避免pod指向指向多个源
181
+ need_update_pod_data.each do |podCoreName,pod|
182
+ local_stable_data.keys.each do |podName|
183
+ if (podName == podCoreName) || @source_manager.has_pod_subspec(podName, podCoreName)
184
+ local_stable_data[podName] = pod
185
+ puts "[PodAssistant] 合并组件 #{podName} #{pod} 以项目为主".yellow
186
+ end
187
+ end
188
+ end
189
+ puts "[PodAssistant] 重新保存本地stable数据".yellow
190
+ @source_manager.update_localstable_datas(local_stable_data)
191
+ else
192
+ puts "[PodAssistant] 本地stable数据无变化<===完成".yellow
193
+ end
194
+ # puts "local_stable_data: #{local_stable_data}".red
195
+ stable_specs = []
196
+ local_stable_data.each do |name,pod|
197
+ if pod.is_a? Hash
198
+ branch = pod[:branch]
199
+ git = pod[:git]
200
+ version = pod[:version]
201
+ method = pod[:method]
202
+ git_format = pod[:git_format]
203
+ commit = pod[:commit]
204
+ linkages = pod[:linkages]
205
+ linkage = pod[:linkage]
206
+ data = { names: [name] }
207
+ if version
208
+ data[:version] = version
209
+ end
210
+ if method
211
+ data[:method] = method
212
+ end
213
+ if branch
214
+ data[:branch] = branch
215
+ end
216
+ if git
217
+ data[:git] = git
218
+ end
219
+ if git_format
220
+ data[:git_format] = git_format
221
+ end
222
+ if commit
223
+ data[:commit] = commit
224
+ end
225
+ if linkages
226
+ data[:linkages] = linkages
227
+ end
228
+ if linkage
229
+ data[:linkage] = linkage
230
+ end
231
+ if !data.empty?
232
+ # puts "name:#{name} stable_specs: #{data}".green
233
+ stable_specs.push(data)
234
+ end
235
+ elsif pod.is_a? String
236
+ stable_specs.push({ names: [name], version: pod, method: REMOTE_TAG })
237
+ else
238
+ puts "unknow type data:#{pod}".red
239
+ end
240
+ end
241
+ return stable_specs
242
+ end
243
+ ################################# linkline stable ����� #################################
244
+
245
+ end
246
+ end
@@ -0,0 +1,128 @@
1
+ #!/usr/bin/ruby
2
+ # Author = Min Hu
3
+
4
+ require 'xcodeproj'
5
+ require 'cocoapods'
6
+
7
+ module BB
8
+ class PodUtils
9
+ # 获取工程根目录路径
10
+ def self.getProjectRootPath
11
+ path = File.expand_path("..", getProjectPath)
12
+ # puts "Project Root Path:#{path}".red
13
+ raise Informative, "#{path} File no exist, please check" unless File.exist?(path)
14
+ return path
15
+ end
16
+ # 获取工程路径
17
+ def self.getProjectPath
18
+ path = Dir.pwd
19
+ # puts "Project Path:#{path}".yellow
20
+ raise Informative, "#{path} File no exist, please check" unless File.exist?(path)
21
+ return path
22
+ end
23
+ # xcode目录
24
+ def self.getXcodeprojPath
25
+ name = Dir.glob("*.xcodeproj")[0]
26
+ path = File.join(getProjectPath, name)
27
+ # puts "xcodeproj:#{path}"
28
+ raise Informative, "#{path} File no exist, please check" unless File.exist?(path)
29
+ return path
30
+ end
31
+ # 获取包名
32
+ def self.getProjectBundleIdentifier
33
+ projectBundleIdentifierKey = "PRODUCT_BUNDLE_IDENTIFIER"
34
+ value = getValueFromInfoPlist(projectBundleIdentifierKey)
35
+ if #{value} == #{projectBundleIdentifierKey}
36
+ project = Xcodeproj::Project.open(getXcodeprojPath)
37
+ project.targets.each do |target|
38
+ target.build_configurations.each do |config|
39
+ value = config.build_settings['PRODUCT_BUNDLE_IDENTIFIER']
40
+ if value && !value.empty?
41
+ break
42
+ end
43
+ end
44
+
45
+ if value && !value.empty?
46
+ break
47
+ end
48
+ end
49
+ puts "xcodeproj BundleIdentifier:#{value}"
50
+ return value
51
+ else
52
+ puts "info BundleIdentifier:#{value}"
53
+ return value
54
+ end
55
+ end
56
+ # 证书团队id
57
+ def self.getProjectDevelopmentTeam
58
+ value = ""
59
+ project = Xcodeproj::Project.open(getXcodeprojPath)
60
+ project.targets.each do |target|
61
+ target.build_configurations.each do |config|
62
+ value = config.build_settings['DEVELOPMENT_TEAM']
63
+
64
+ if value && !value.empty?
65
+ # 做你的处理
66
+ break
67
+ end
68
+ end
69
+ end
70
+ puts "xcodeproj DevelopmentTeam:#{value}"
71
+ return value
72
+ end
73
+ # 获取info配置文件路径
74
+ def self.getInfoPlistPath
75
+ path = File.join(getProjectPath, "bbframework/Resources/Info.plist")
76
+ # puts "InfoPlist:#{path}"
77
+ raise Informative, "#{path} File no exist, please check" unless File.exist?(path)
78
+ return path
79
+ end
80
+ # 获取info配置key对应的值
81
+ def self.getValueFromInfoPlist(key)
82
+ plistPath = getInfoPlistPath
83
+ value = `/usr/libexec/PlistBuddy -c "Print #{key}" #{plistPath}`
84
+ value = value.rstrip()
85
+ puts "#{key} => #{value}"
86
+ return value
87
+ end
88
+ # 获取Xcode版本
89
+ def self.xcode_version
90
+ xcode_version_output = `xcode-select -p`
91
+ return nil if xcode_version_output.empty?
92
+
93
+ xcode_path = xcode_version_output.chomp
94
+ version_output = `xcodebuild -version`
95
+
96
+ # Extract the Xcode version number
97
+ version_match = version_output.match(/Xcode (\d+(\.\d+)+)/)
98
+ return nil if version_match.nil?
99
+
100
+ xcode_version = version_match[1]
101
+ return xcode_version
102
+ end
103
+ # xcode14以上,14以后不再支持armv7(32位设备)
104
+ def self.compare_xcode_14_version
105
+ current_version = xcode_version
106
+ if current_version.nil?
107
+ puts "未找到安装的Xcode版本。".red
108
+ else
109
+ puts "当前Xcode版本:#{current_version}"
110
+ num_ver = current_version.to_i
111
+ return num_ver >= 14
112
+ end
113
+ return false
114
+ end
115
+ # xcode15以上
116
+ def self.compare_xcode_15_version
117
+ current_version = xcode_version
118
+ if current_version.nil?
119
+ puts "未找到安装的Xcode版本。".red
120
+ else
121
+ puts "当前Xcode版本:#{current_version}"
122
+ num_ver = current_version.to_i
123
+ return num_ver >= 15
124
+ end
125
+ return false
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,36 @@
1
+ require 'cocoapods-bb-PodAssistant/helpers/git_cmd_helper'
2
+ require 'cocoapods-bb-PodAssistant/config/stable_source'
3
+
4
+ module BB
5
+ class StableEnv
6
+ def initialize(stable_source = nil, stable_branch = nil, stable_tag = nil)
7
+ if stable_source.nil?
8
+ stable_source = StableSource.stable_default_source
9
+ end
10
+ @stable_source = stable_source
11
+ @stable_branch = stable_branch
12
+ @stable_tag = stable_tag
13
+
14
+ @cache = BB::Cache.new()
15
+ configGitPath(@cache.cachePath)
16
+ end
17
+
18
+ # stable 环境,执行pod stable
19
+ def loadStaleEnv
20
+
21
+ end
22
+
23
+ # 开发环境,执行pod install/update
24
+ def loadDeveloperEnv
25
+ cachePath = @cache.cachePath
26
+ puts "hook [pod install/update] sync stable git=>#{cachePath}"
27
+ if Dir.exist?(File.join(cachePath))
28
+ `cd #{cachePath}; git switch main; git pull --all`
29
+ else
30
+ clonePath = File.dirname(cachePath)
31
+ FileUtils.mkdir_p clonePath
32
+ `git clone #{@stable_source} #{cachePath}`
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,85 @@
1
+ require 'cocoapods-bb-PodAssistant/config/stable_specs'
2
+ require 'cocoapods-bb-PodAssistant/helpers'
3
+
4
+ module BB
5
+ class StableManager
6
+ def initialize()
7
+ end
8
+
9
+ # podfile 更新配置文件使用(通用)
10
+ def update_common_stable_lock(pod_targets)
11
+ update_stable_lock(public_stable_yaml, pod_targets)
12
+ end
13
+ # podfile 更新配置文件使用(业务线)
14
+ def update_business_stable_lock(businessSpecName, pod_targets)
15
+ update_stable_lock(business_stable_yaml(businessSpecName), pod_targets)
16
+ end
17
+ # podfile 更新配置文件使用(项目)
18
+ def update_product_stable_lock(pod_targets)
19
+ update_local_stable_lock(local_stable_yaml, pod_targets)
20
+ end
21
+
22
+ # 仓库缓存目录
23
+ def cachePath
24
+ if @cache.nil?
25
+ @cache = BB::Cache.new()
26
+ end
27
+ return @cache.cachePath
28
+ end
29
+
30
+ # 公共源路径(远端)
31
+ def public_stable_yaml
32
+ return File.join(cachePath, "stable_specs.yml") #名称固定
33
+ end
34
+
35
+ # 业务源路径(远端)
36
+ def business_stable_yaml(businessSpecName)
37
+ if businessSpecName
38
+ return File.join(cachePath, "#{businessSpecName}.yml") #名称由各自业务线约定
39
+ end
40
+ return nil
41
+ end
42
+
43
+ # 本地源路径
44
+ def local_stable_yaml
45
+ return File.join(Pathname.pwd, "stable_specs_lock.yml") #名称固定
46
+ end
47
+
48
+ private def update_stable_lock(yml_path, pod_targets)
49
+ # step.1 更新yaml配置文件
50
+ stableSpec = BB::StableSpecs.new()
51
+ stableSpec.update_stable_lock(yml_path, pod_targets)
52
+ # step.2 提交修改后代码
53
+ yml_name = File.basename(yml_path)
54
+ `cd #{cachePath}; git pull --all; git add #{yml_name}; git commit -m "[update] 更新stable配置文件#{yml_name}"; git push; git pull --all;`
55
+ end
56
+ private def update_local_stable_lock(yml_path, pod_targets)
57
+ # step.1 更新yaml配置文件
58
+ stableSpec = BB::StableSpecs.new()
59
+ stableSpec.update_local_stable_lock(yml_path, pod_targets)
60
+ end
61
+
62
+ # 更新通用lock
63
+ def self.updateCommonStableLock(pod_targets)
64
+ stableMgr = StableManager.new()
65
+ stableMgr.update_common_stable_lock(pod_targets)
66
+ end
67
+ # podfile 更新配置文件使用(业务线)
68
+ def self.updateBusinessStableLock(businessSpecName, pod_targets)
69
+ stableMgr = StableManager.new()
70
+ stableMgr.update_stable_lock(businessSpecName, pod_targets)
71
+ end
72
+ # 更新产品lock
73
+ def self.updateProductStableLock(pod_targets)
74
+ stableMgr = StableManager.new()
75
+ stableMgr.update_product_stable_lock(pod_targets)
76
+ end
77
+ end
78
+
79
+ # class << self
80
+ # def updateCommonStableLock(pod_targets)
81
+ # stableMgr = StableManager.new()
82
+ # stableMgr.update_common_stable_lock(pod_targets)
83
+ # end
84
+ # end
85
+ end
@@ -0,0 +1,72 @@
1
+ require 'yaml'
2
+
3
+ YAML_CONFIG_LIST_KEY = "list"
4
+ YAML_CONFIG_REMOVE_KEY = "remove"
5
+ YAML_CONFIG_DEPENDENCIES_KEY = "dependencies"
6
+
7
+
8
+ # 数据源格式 json:{list:{name:ver},remove:[name],dependencies:{name:[name]}}
9
+ # list 受版本控制数据
10
+ # remove 移除数据
11
+ # dependencies 依赖数据
12
+ module BB
13
+ class YamlFilesHelper
14
+ def self.save_stable_podlock(yml_path, pod_targets)
15
+ yamlData = read_stable_lock_yaml(yml_path)
16
+ # test data
17
+ # yamlData[YAML_CONFIG_REMOVE_KEY] = ["AFNetworking"]
18
+ # yamlData[YAML_CONFIG_DEPENDENCIES_KEY] = {"BBNativeContainer":["BBSchemeDispatcher","BBComponentServicesKit"]}
19
+ if yamlData.is_a? Hash
20
+ listdata = yamlData[YAML_CONFIG_LIST_KEY]
21
+ removedata = yamlData[YAML_CONFIG_REMOVE_KEY]
22
+ dependenciesdata = yamlData[YAML_CONFIG_DEPENDENCIES_KEY]
23
+ else
24
+ yamlData = {}
25
+ end
26
+ if listdata.nil?
27
+ listdata = {}
28
+ end
29
+ # 公共配置写入规则
30
+ if removedata.nil?
31
+ removedata = []
32
+ end
33
+ if dependenciesdata.nil?
34
+ dependenciesdata = {}
35
+ end
36
+ pod_targets.map { |pod_target|
37
+ name = pod_target.pod_name
38
+ listdata[name] = pod_target.root_spec.version.version
39
+ # 策略:列表存在数据需要删除移除数据
40
+ removedata.delete(name)
41
+ }
42
+ yamlData[YAML_CONFIG_LIST_KEY] = listdata
43
+ yamlData[YAML_CONFIG_REMOVE_KEY] = removedata
44
+ yamlData[YAML_CONFIG_DEPENDENCIES_KEY] = dependenciesdata
45
+ save_stable_lock_yaml(yml_path, yamlData)
46
+ end
47
+ def self.save_local_stable_podlock(yml_path, pod_targets)
48
+ yamlData = read_stable_lock_yaml(yml_path)
49
+ if yamlData.is_a? Hash
50
+ pod_targets.map { |pod_target|
51
+ name = pod_target.pod_name
52
+ yamlData[name] = pod_target.root_spec.version.version
53
+ }
54
+ save_stable_lock_yaml(yml_path, yamlData)
55
+ end
56
+ end
57
+
58
+ def self.save_stable_lock_yaml(yml_path, pod_jsondata)
59
+ File.open(yml_path,"w") { |f| YAML.dump(pod_jsondata, f) }
60
+ end
61
+
62
+ def self.read_stable_lock_yaml(yml_path)
63
+ if File.file?(yml_path)
64
+ # puts "read yaml path:#{yml_path}"
65
+ json = YAML.load_file(yml_path)
66
+ # puts "read json:#{json}"
67
+ return json
68
+ end
69
+ return {}
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,6 @@
1
+ require 'cocoapods-bb-PodAssistant/helpers/pod_module_helper'
2
+ require 'cocoapods-bb-PodAssistant/helpers/yaml_files_helper'
3
+ require 'cocoapods-bb-PodAssistant/helpers/git_cmd_helper'
4
+ require 'cocoapods-bb-PodAssistant/helpers/stable_env_helper'
5
+ require 'cocoapods-bb-PodAssistant/helpers/stable_manager_helper'
6
+ require 'cocoapods-bb-PodAssistant/helpers/pod_utils'