cocoapods-meitu-bin 1.3.1 → 1.4.0

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 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