cocoapods-meitu-bin 1.3.1 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d27332c19899d2616ca39da9eb2d13d98184216975d6f1408bdb162856bcc24a
4
- data.tar.gz: eee1c74f1fa28b591eb67f7bddeab453c070ace04fccc336cb9ada5935b11364
3
+ metadata.gz: 471b86e9797ce3ab7f09877755b0c3473baa5ea31ff3d3f19694dd829059b033
4
+ data.tar.gz: eef8b276868277386cc2153030a0f8dab00ee0fba7d4574d05c04406879e3aa7
5
5
  SHA512:
6
- metadata.gz: a33d6edea1cc51c1a0a17717235e2ee102d7d2ca207d3c1560b3c3ea11082b01c545f9152c8e7e06f1d5ee52381049447418fad9fc290d94044fa3ced8cb090e
7
- data.tar.gz: db8b46477b4cc6c4533c28f0130f623650f48cf6bb88b56f1e0c0aedd0c5d4216fc09de5ba4456c97121d00ed7f3a29f1327d757d4710370e784fa77ce91d520
6
+ metadata.gz: 56f89da57ab03d6622b7c2f5649bd45a68fc89c6dd9847fafcf547da1d6a80255cb33c22ac12629d49e4d272b977d19911fe9a318721e6c7425775464dd3e3e0
7
+ data.tar.gz: 41be7d7d12089f6a6c8c74f45d4eda244f478c20634ea27d553b74bccc104b0c6cc6840b91320addf3bd97cf1c51915ea814a66096d0efd53b9f97d63d79ce73
@@ -153,35 +153,17 @@ module Pod
153
153
 
154
154
  # 获取 podfile
155
155
  def podfile
156
- @podfile ||= begin
157
- podfile_path = File.join(Pathname.pwd, 'Podfile')
158
- raise Informative, 'Podfile不存在' unless File.exist?(podfile_path)
159
- sources_manager = Pod::Config.instance.sources_manager
160
- podfile = Podfile.from_file(Pathname.new(podfile_path))
161
- podfile_hash = podfile.to_hash
162
- podfile_hash['sources'] = (podfile_hash['sources'] || []).concat(sources_manager.code_source_list.map(&:url))
163
- podfile_hash['sources'] << sources_manager.binary_source.url
164
- podfile_hash['sources'].uniq!
165
- Podfile.from_hash(podfile_hash)
166
- end
156
+ @podfile ||= Pod::Config.instance.podfile
167
157
  end
168
158
 
169
159
  # 获取 podfile.lock
170
160
  def lockfile
171
- @lockfile ||= begin
172
- lock_path = File.join(Pathname.pwd, 'Podfile.lock')
173
- raise Informative, 'Podfile.lock不存在,请执行pod install' unless File.exist?(lock_path)
174
- Lockfile.from_file(Pathname.new(lock_path))
175
- end
161
+ @lockfile ||= Pod::Config.instance.lockfile
176
162
  end
177
163
 
178
164
  # 获取 sandbox
179
165
  def sandbox
180
- @sandbox ||= begin
181
- sandbox_path = File.join(Pathname.pwd, 'Pods')
182
- raise Informative, 'Pods文件夹不存在,请执行pod install' unless File.exist?(sandbox_path)
183
- Pod::Sandbox.new(sandbox_path)
184
- end
166
+ @sandbox ||= Pod::Config.instance.sandbox
185
167
  end
186
168
 
187
169
  # 根据podfile和podfile.lock分析依赖
@@ -17,12 +17,14 @@ module Pod
17
17
 
18
18
  def self.options
19
19
  [
20
- %w[--error-source 过滤异常的source,比如http的,CI打包只支持SSH认证]
20
+ %w[--error-source 过滤异常的source,比如http的,CI打包只支持SSH认证],
21
+ %w[--export-file 导出当前所有tag版本的podspec]
21
22
  ].concat(super).uniq
22
23
  end
23
24
 
24
25
  def initialize(argv)
25
26
  @error_source = argv.flag?('error-source', false)
27
+ @export_file = argv.flag?('export-file', false)
26
28
  super
27
29
  end
28
30
 
@@ -33,8 +35,26 @@ module Pod
33
35
  repo_update
34
36
  # 分析依赖
35
37
  @analyze_result = analyse
36
- # 打印source
37
- show_cost_source
38
+
39
+ if @error_source
40
+ # 打印source
41
+ show_cost_source
42
+ end
43
+
44
+ if @export_file
45
+ pod_targets = @analyze_result.pod_targets.uniq
46
+ pod_targets.map { |pod_target|
47
+ current_path = Dir.pwd
48
+ spec_path = "#{current_path}/podfile_shell/#{pod_target.root_spec.name}/#{pod_target.root_spec.version.version}/"
49
+ `mkdir -p #{spec_path}`
50
+ if system("cp #{pod_target.root_spec.defined_in_file.to_s} #{spec_path} > /dev/null 2>&1")
51
+ puts "#{pod_target.root_spec.name} 的 #{pod_target.root_spec.version.version} 已经导出"
52
+ else
53
+ `rm -rf #{current_path}/podfile_shell/#{pod_target.root_spec.name} > /dev/null 2>&1`
54
+ end
55
+ # puts pod_target.root_spec.name pod_target.root_spec.version.version pod_target.root_spec.defined_in_file
56
+ }
57
+ end
38
58
  # 计算耗时
39
59
  show_cost_time
40
60
  end
@@ -98,35 +118,17 @@ module Pod
98
118
 
99
119
  # 获取 podfile
100
120
  def podfile
101
- @podfile ||= begin
102
- podfile_path = File.join(Pathname.pwd, 'Podfile')
103
- raise 'Podfile不存在' unless File.exist?(podfile_path)
104
- sources_manager = Pod::Config.instance.sources_manager
105
- podfile = Podfile.from_file(Pathname.new(podfile_path))
106
- podfile_hash = podfile.to_hash
107
- podfile_hash['sources'] = (podfile_hash['sources'] || []).concat(sources_manager.code_source_list.map(&:url))
108
- podfile_hash['sources'] << sources_manager.binary_source.url
109
- podfile_hash['sources'].uniq!
110
- Podfile.from_hash(podfile_hash)
111
- end
121
+ @podfile ||= Pod::Config.instance.podfile
112
122
  end
113
123
 
114
124
  # 获取 podfile.lock
115
125
  def lockfile
116
- @lockfile ||= begin
117
- lock_path = File.join(Pathname.pwd, 'Podfile.lock')
118
- raise 'Podfile.lock不存在,请执行pod install' unless File.exist?(lock_path)
119
- Lockfile.from_file(Pathname.new(lock_path))
120
- end
126
+ @lockfile ||= Pod::Config.instance.lockfile
121
127
  end
122
128
 
123
129
  # 获取 sandbox
124
130
  def sandbox
125
- @sandbox ||= begin
126
- sandbox_path = File.join(Pathname.pwd, 'Pods')
127
- raise 'Pods文件夹不存在,请执行pod install' unless File.exist?(sandbox_path)
128
- Pod::Sandbox.new(sandbox_path)
129
- end
131
+ @sandbox ||= Pod::Config.instance.sandbox
130
132
  end
131
133
 
132
134
  # 根据podfile和podfile.lock分析依赖
@@ -15,7 +15,7 @@ require 'cocoapods-meitu-bin/command/bin/lock'
15
15
  require 'cocoapods-meitu-bin/command/bin/source'
16
16
  require 'cocoapods-meitu-bin/helpers'
17
17
  require 'cocoapods-meitu-bin/helpers/framework_builder'
18
-
18
+ require 'cocoapods-meitu-bin/native/clean'
19
19
  module Pod
20
20
  class Command
21
21
  # This is an example of a cocoapods plugin adding a top-level subcommand
@@ -12,6 +12,9 @@ module CBin
12
12
  def template_hash
13
13
  {
14
14
  'configuration_env' => { description: '编译环境', default: 'dev', selection: %w[dev debug_iphoneos release_iphoneos] },
15
+ 'minimum_deployment_target' => { description: '最低部署目标,参与二进制版本生成', default: 'iOS12.0'},
16
+ 'bundle_identifier' => { description: '捆绑标识符,参与二进制版本生成', default: 'com.xxx.www' },
17
+ 'random_value' => { description: '随机值,参与二进制版本生成', default: 'a1b2c3d4f5' },
15
18
  'binary_repo_url' => { description: '二进制podspec私有源地址', default: 'git@github.com:Zhangyanshen/example-private-spec-bin.git' },
16
19
  'binary_upload_url' => { description: '二进制文件上传地址', default: 'http://localhost:8080/frameworks' },
17
20
  'binary_download_url' => { description: '二进制文件下载地址,后面会依次传入Xcode版本、configuration、组件名称与组件版本', default: 'http://localhost:8080/frameworks' },
@@ -56,6 +59,8 @@ module CBin
56
59
  CBin.config.binary_download_url
57
60
  end
58
61
 
62
+
63
+
59
64
  def set_configuration_env(env)
60
65
  @configuration_env = env
61
66
  end
@@ -158,8 +163,34 @@ class PodUpdateConfig
158
163
  @@is_mtxx = false
159
164
  @@is_clear = false
160
165
  @@shell_project = false
161
-
162
-
166
+ @@external_source_commit = {}
167
+
168
+
169
+
170
+ def self.set_external_source_commit
171
+ podfile_obj = Pod::Config.instance.podfile
172
+ # 遍历 Podfile 中的目标定义
173
+ podfile_obj.target_definitions.each do |target_name, target_definition|
174
+ target_definition.dependencies.each do |dependency|
175
+ if dependency.external_source
176
+ # if dependency.name == "MTBusinessBaseKit"
177
+ # puts dependency.external_source
178
+ # end
179
+ if dependency.external_source[:commit]
180
+ git_commit = dependency.external_source[:commit]
181
+ # puts "Git Commit for #{dependency}: #{git_commit}"
182
+ if @@external_source_commit[dependency.name].nil?
183
+ @@external_source_commit[dependency.name] = git_commit
184
+ end
185
+ end
186
+ end
187
+ end
188
+ end
189
+ puts "#{@@external_source_commit}" if ENV['p_bin_d'] == '1'
190
+ end
191
+ def self.external_source_commit
192
+ @@external_source_commit
193
+ end
163
194
  def self.set_shell_project
164
195
  @@shell_project = true
165
196
  end
@@ -1,5 +1,5 @@
1
1
  module CBin
2
- VERSION = "1.3.1"
2
+ VERSION = "1.4.0"
3
3
  end
4
4
 
5
5
  module Pod
@@ -1,5 +1,5 @@
1
1
  require 'digest'
2
-
2
+ require 'cocoapods-meitu-bin/config/config'
3
3
  module CBin
4
4
  module BuildAll
5
5
  class BinHelper
@@ -20,7 +20,14 @@ module CBin
20
20
  # puts "#{pod_name}:#{include_dependencies}"
21
21
  if include_dependencies
22
22
  specs << dependencies_str(pod_name, specifications)
23
+ else
24
+ if !ENV['MEITU_USE_OPEN_COMMIT']
25
+ specs << dependencies_commit_str(pod_name, specifications)
26
+ end
23
27
  end
28
+ specs << minimum_deployment_target_str
29
+ specs << bundle_identifier_str
30
+ specs << random_value_str
24
31
  specs << xcode_version
25
32
  specs << (configuration.nil? ? 'Debug' : configuration)
26
33
  specs_str = specs.join('')
@@ -35,6 +42,20 @@ module CBin
35
42
  "#{original_version}.bin#{specs_str_md5}"
36
43
  end
37
44
 
45
+ #最低部署目标,参与二进制版本生成
46
+ def minimum_deployment_target_str
47
+ CBin.config.minimum_deployment_target
48
+ end
49
+
50
+ # 捆绑标识符,参与二进制版本生成
51
+ def bundle_identifier_str
52
+ CBin.config.bundle_identifier
53
+ end
54
+ # 随机值,参与二进制版本生成
55
+ def random_value_str
56
+ CBin.config.random_value
57
+ end
58
+
38
59
  def xcode_version
39
60
  @xcode_version ||= begin
40
61
  `xcodebuild -version`.split(' ').join('')
@@ -49,11 +70,13 @@ module CBin
49
70
  # 将当前 Pod 库的依赖库拼接成字符串(格式:pod1_name(pod1_version),pod2_name(pod2_version),...)
50
71
  def dependencies_str(pod_name, specifications)
51
72
  deps = []
73
+
52
74
  specifications.map do |spec|
53
75
  if spec.root.name == pod_name
54
76
  deps.concat(spec.dependencies)
55
77
  end
56
78
  end
79
+
57
80
  if deps.empty?
58
81
  UI.puts "`#{pod_name}`无依赖库".red if ENV['p_bin_d'] == '1'
59
82
  return ''
@@ -64,6 +87,11 @@ module CBin
64
87
  next
65
88
  end
66
89
  version = dep_version(dep, specifications)
90
+ if !ENV['MEITU_USE_OPEN_COMMIT']
91
+ if PodUpdateConfig.external_source_commit[dep.name]
92
+ version = PodUpdateConfig.external_source_commit[dep.name]
93
+ end
94
+ end
67
95
  result << "#{dep.name}(#{version})"
68
96
  end
69
97
  if ENV['p_bin_d'] == '1'
@@ -76,6 +104,29 @@ module CBin
76
104
  end
77
105
  result.join(',')
78
106
  end
107
+ def dependencies_commit_str(pod_name, specifications)
108
+ deps = []
109
+ specifications.map do |spec|
110
+ if spec.root.name == pod_name
111
+ deps.concat(spec.dependencies)
112
+ end
113
+ end
114
+
115
+ if deps.empty?
116
+ UI.puts "`#{pod_name}`无依赖库".red if ENV['p_bin_d'] == '1'
117
+ return ''
118
+ end
119
+ result = []
120
+ deps.uniq.map do |dep|
121
+ if dep.root_name == pod_name
122
+ next
123
+ end
124
+ if PodUpdateConfig.external_source_commit[dep.name]
125
+ result << "#{dep.name}(#{PodUpdateConfig.external_source_commit[dep.name]})"
126
+ end
127
+ end
128
+ result.join(',')
129
+ end
79
130
 
80
131
  # 获取依赖库版本号
81
132
  def dep_version(dep, specifications)
@@ -0,0 +1,95 @@
1
+ require 'cocoapods/downloader'
2
+
3
+ module Pod
4
+ class Command
5
+ class Bin < Command
6
+ class Clean < Bin
7
+ # self.abstract_command = true
8
+ self.summary = '删除二进制组件版本pod缓存'
9
+ self.description = <<-DESC
10
+ #{summary},--all 移除全部二进制版本缓存
11
+ DESC
12
+
13
+ def self.options
14
+ [
15
+ %w[--all 移除全部二进制版本缓存],
16
+ # %w[--no-need 移除除了当前需要的版本外的其他版本二进制版本缓存]
17
+ ].concat(super).uniq
18
+ end
19
+
20
+ def initialize(argv)
21
+ @all = argv.flag?('all', false)
22
+ # @no_need = argv.flag?('no-need', false)
23
+ super
24
+ end
25
+
26
+ def run
27
+ cache = Downloader::Cache.new(Pod::Config.instance.cache_root + 'Pods')
28
+ all_del_cache_size=0
29
+ cache.cache_descriptors_per_pod.each do |pod_name, cache_descriptors|
30
+ del_cache_descriptors = []
31
+ del_cache_versions = []
32
+ current_pod_name_del_cache_size=0
33
+ cache_descriptors.each do |desc|
34
+ # version 包含 bin
35
+ if desc[:version].to_s.include?('bin')
36
+ if @all
37
+ current_pod_name_del_cache_size += folder_size(desc[:slug])
38
+ del_cache_descriptors << desc
39
+ del_cache_versions << desc[:version]
40
+ end
41
+ end
42
+ end
43
+ all_del_cache_size+=current_pod_name_del_cache_size
44
+ size = format_size(current_pod_name_del_cache_size)
45
+ Pod::UI.puts "#{pod_name}删除#{del_cache_versions}共#{size}"
46
+ remove_caches(del_cache_descriptors)
47
+ end
48
+ size = format_size(all_del_cache_size)
49
+ Pod::UI.puts "共删除#{size}二进制版本pod缓存".red
50
+ end
51
+
52
+ private
53
+ def remove_caches(cache_descriptors)
54
+ cache_descriptors.each do |desc|
55
+ UI.message("Removing spec #{desc[:spec_file]} (v#{desc[:version]})") do
56
+ FileUtils.rm(desc[:spec_file])
57
+ end
58
+ UI.message("Removing cache #{desc[:slug]}") do
59
+ FileUtils.rm_rf(desc[:slug])
60
+ end
61
+ end
62
+ end
63
+ def folder_size(path)
64
+ return 0 unless File.directory?(path)
65
+
66
+ total_size = 0
67
+ Dir.foreach(path) do |entry|
68
+ next if entry == '.' || entry == '..'
69
+
70
+ full_path = File.join(path, entry)
71
+ if File.file?(full_path)
72
+ total_size += File.size(full_path)
73
+ elsif File.directory?(full_path)
74
+ total_size += folder_size(full_path)
75
+ end
76
+ end
77
+
78
+ total_size
79
+ end
80
+ def format_size(size)
81
+ units = %w[bytes KB MB GB TB]
82
+ return '0 bytes' if size.zero?
83
+
84
+ exp = (Math.log(size) / Math.log(1024)).to_i
85
+ exp = units.size - 1 if exp > units.size - 1
86
+ format('%.2f %s', size / (1024 ** exp).to_f, units[exp])
87
+ end
88
+ def clean_all_binary
89
+ # Your method implementation here
90
+
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -133,6 +133,8 @@ module Pod
133
133
  start_time = Time.now
134
134
  @activated = Molinillo::Resolver.new(self, self).resolve(dependencies, locked_dependencies)
135
135
  UI.puts "pod_time_profiler: Molinillo resolve耗时:#{'%.1f' % (Time.now - start_time)}s".green
136
+ #记录podfile 中commit 使用的组件map,提供后面二进制版本生成使用
137
+ PodUpdateConfig.set_external_source_commit
136
138
  resolver_specs_by_target
137
139
  rescue Molinillo::ResolverError => e
138
140
  handle_resolver_error(e)
@@ -201,14 +201,17 @@ Pod::HooksManager.register('cocoapods-meitu-bin', :pre_install) do |_context|
201
201
  require 'cocoapods-meitu-bin/native'
202
202
  require 'cocoapods-meitu-bin/helpers/buildAll/bin_helper'
203
203
  Pod::UI.puts "当前configuration: `#{ENV['configuration'] || Pod::Config.instance.podfile.configuration}`".green
204
- # checksum = Pod::Config.instance.podfile.checksum
205
- # puts Pod::Config.instance
206
- # installer = Installer.new(config.sandbox, config.podfile, config.lockfile)
207
- # puts checksum
208
204
  # pod bin repo update 更新二进制私有源
209
205
  Pod::Command::Bin::Repo::Update.new(CLAide::ARGV.new($ARGV)).run
210
-
211
- get_podfile_lock
206
+ content = File.read(Pod::Config.instance.podfile_path)
207
+ if content
208
+ if content.include?("target \"MTXX\"")
209
+ PodUpdateConfig.set_is_mtxx(true)
210
+ else
211
+ PodUpdateConfig.set_is_mtxx(false)
212
+ end
213
+ end
214
+ # get_podfile_lock
212
215
 
213
216
  # 有插件/本地库 且是dev环境下,默认进入源码白名单 过滤 archive命令
214
217
  if _context.podfile.plugins.keys.include?('cocoapods-meitu-bin') && _context.podfile.configuration_env == 'dev'
@@ -242,17 +245,17 @@ Pod::HooksManager.register('cocoapods-meitu-bin', :pre_install) do |_context|
242
245
  PodUpdateConfig.set_prepare_time(Time.now - start_time)
243
246
  end
244
247
 
245
- # 注册 pod install 钩子
246
- Pod::HooksManager.register('cocoapods-meitu-bin', :post_install) do |context|
247
- #基于podfile的checksum上报云端podfile.lock文件
248
- if PodUpdateConfig.is_mtxx
249
- if PodUpdateConfig.checksum
250
- upload_podfile_lock(PodUpdateConfig.checksum)
251
- end
252
- upload_branch_podfile_lock
253
- end
254
-
255
- end
248
+ # # 注册 pod install 钩子
249
+ # Pod::HooksManager.register('cocoapods-meitu-bin', :post_install) do |context|
250
+ # #基于podfile的checksum上报云端podfile.lock文件
251
+ # if PodUpdateConfig.is_mtxx
252
+ # if PodUpdateConfig.checksum
253
+ # upload_podfile_lock(PodUpdateConfig.checksum)
254
+ # end
255
+ # upload_branch_podfile_lock
256
+ # end
257
+ #
258
+ # end
256
259
 
257
260
  Pod::HooksManager.register('cocoapods-meitu-bin', :source_provider) do |context, _|
258
261
  sources_manager = Pod::Config.instance.sources_manager
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-meitu-bin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jensen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-20 00:00:00.000000000 Z
11
+ date: 2023-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parallel
@@ -30,20 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.10.2
34
- - - "<="
35
- - !ruby/object:Gem::Version
36
- version: 1.11.2
33
+ version: '0'
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
38
  - - ">="
42
39
  - !ruby/object:Gem::Version
43
- version: 1.10.2
44
- - - "<="
45
- - !ruby/object:Gem::Version
46
- version: 1.11.2
40
+ version: '0'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: cocoapods-generate
49
43
  requirement: !ruby/object:Gem::Requirement
@@ -149,6 +143,7 @@ files:
149
143
  - lib/cocoapods-meitu-bin/native.rb
150
144
  - lib/cocoapods-meitu-bin/native/acknowledgements.rb
151
145
  - lib/cocoapods-meitu-bin/native/analyzer.rb
146
+ - lib/cocoapods-meitu-bin/native/clean.rb
152
147
  - lib/cocoapods-meitu-bin/native/file_accessor.rb
153
148
  - lib/cocoapods-meitu-bin/native/gen.rb
154
149
  - lib/cocoapods-meitu-bin/native/installation_options.rb