cocoapods-podgenerate 0.1.13 → 0.1.14

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: 8339033a347400214385a8528759a3ca70fbe8d739579566bab631277f89e82c
4
- data.tar.gz: aef46f6fbac5628e104b628efa2b4d37f3fd9e9a0e2eccaf9d30208b884c4837
3
+ metadata.gz: 6a0fb718ed83348848126cbcb90a580683859fec7c0f9e82afefe69e58ab67cd
4
+ data.tar.gz: 6f26fbc0e1c1e842dbbbe0d97747d883939a583c9792f7d9988c779bb6236025
5
5
  SHA512:
6
- metadata.gz: 26608721fe59f715e12457f268d45d8d9ccc375758d38c4e5fd4e9c0b678e8e09c3339f7ebf22deba6fe86d1ae5f5598d46d7400af58f78a0dfbaf8a4d3f1e27
7
- data.tar.gz: 7a931fa7d0dc2613c35efffd823b76a0f6cabb53aef0b3834e9e9c6c4b2a4450528c960795cd1255e8380c0c2c6687ad34920ae06ab82d740e465a73ea6dc6d4
6
+ metadata.gz: b33b6753e7a3852c344b26b5f3c74e994e8e0eec5428f6749f775de1d1367fb79920d35bec4df8662cc80406155ffc05486e9f8ae5021ca61e88f92ca75df13a
7
+ data.tar.gz: a5dfb1691904f9f018660759adbc0de1d15e4865994f43f7174233812cabb8462b59cc515b33f4fbfbfdcc8936f8b99c684aac88943f2df797f4505d18687a94
@@ -13,14 +13,16 @@ module Pod
13
13
  DEFAULT_TIMEOUT = 120
14
14
 
15
15
  class << self
16
- # 计算适合当前机器的线程池大小
17
- # 使用 nproc - 1(为主线程留一个核心),最小 2,最大 16
18
- # @return [Integer] 推荐的线程池大小
19
- def pool_size
20
- [[Etc.nprocessors - 1, 2].max, 16].min
21
- rescue NameError
22
- 4
23
- end
16
+ # 计算适合当前机器的线程池大小
17
+ # 使用 nproc - 1(为主线程留一个核心),最小 2,最大 16
18
+ # 同时提供 pool_size 和 compute_pool_size 两个名称,供各 patch 文件统一使用。
19
+ # @return [Integer] 推荐的线程池大小
20
+ def pool_size
21
+ [[Etc.nprocessors - 1, 2].max, 16].min
22
+ rescue NameError
23
+ 4
24
+ end
25
+ alias compute_pool_size pool_size
24
26
  end
25
27
  end
26
28
  end
@@ -32,7 +32,6 @@
32
32
  # - lib/cocoapods/installer/project_cache/project_cache_analyzer.rb
33
33
 
34
34
  require 'concurrent'
35
- require 'etc'
36
35
 
37
36
  module Pod
38
37
  module PodGenerate
@@ -59,7 +58,7 @@ module Pod
59
58
  # target 标签到缓存键的映射
60
59
  def create_cache_key_mappings(target_by_label)
61
60
  UI.message '- Creating cache key mappings (parallel)' do
62
- pool_size = compute_pool_size
61
+ pool_size = Pod::PodGenerate::Parallel::ThreadPool.compute_pool_size
63
62
  pool = Concurrent::FixedThreadPool.new(pool_size)
64
63
  mutex = Mutex.new
65
64
  results = {}
@@ -115,12 +114,6 @@ module Pod
115
114
  end
116
115
  end
117
116
 
118
- # 计算线程池大小
119
- def compute_pool_size
120
- [[Etc.nprocessors - 1, 2].max, 16].min
121
- rescue NameError
122
- 4
123
- end
124
117
  end
125
118
  end
126
119
  end
@@ -38,7 +38,6 @@
38
38
  # - lib/cocoapods/installer/xcode/pods_project_generator.rb
39
39
 
40
40
  require 'concurrent'
41
- require 'etc'
42
41
 
43
42
  module Pod
44
43
  module PodGenerate
@@ -88,8 +87,8 @@ module Pod
88
87
  stage_sandbox(sandbox, pod_targets)
89
88
 
90
89
  cache_analysis_result = analyze_project_cache
91
- ptg = cache_analysis_result.pod_targets_to_generate
92
- atg = cache_analysis_result.aggregate_targets_to_generate
90
+ ptg = cache_analysis_result.pod_targets_to_generate || []
91
+ atg = cache_analysis_result.aggregate_targets_to_generate || []
93
92
 
94
93
  # ── 本地开发 pod 文件级变更检测 ──
95
94
  # CocoaPods 的 TargetCacheKey 使用 spec attributes_hash(如
@@ -98,17 +97,15 @@ module Pod
98
97
  # glob 模式不变 → cache key 不变 → ptg 为空 → "No changes" 跳过。
99
98
  # 解决方法:为每个开发 pod 计算当前源文件列表的 SHA256,
100
99
  # 与上次运行的清单比较,有差异时强制加入 ptg。
101
- if ptg.empty? && (atg.nil? || atg.empty?)
102
- unless sandbox.development_pods.empty?
103
- dev_changed = detect_dev_pod_file_changes
104
- unless dev_changed.empty?
105
- Pod::UI.puts "[cocoapods-podgenerate] Dev pod files changed: #{dev_changed.map(&:pod_name).join(', ')} — forcing regeneration"
106
- ptg = dev_changed
107
- end
100
+ unless sandbox.development_pods.empty?
101
+ dev_changed = detect_dev_pod_file_changes
102
+ unless dev_changed.empty?
103
+ Pod::UI.puts "[cocoapods-podgenerate] Dev pod files changed: #{dev_changed.map(&:pod_name).join(', ')} — forcing regeneration"
104
+ ptg = (ptg + dev_changed).uniq
108
105
  end
109
106
  end
110
107
 
111
- if ptg.empty? && (atg.nil? || atg.empty?)
108
+ if ptg.empty? && atg.empty?
112
109
  Pod::UI.puts "[cocoapods-podgenerate] No changes — skipping project generation"
113
110
 
114
111
  # C2 修复: 初始化所有实例变量(避免下游代码获得 nil)
@@ -179,7 +176,7 @@ module Pod
179
176
  # 创建空项目降级,避免 post-install hook 中 nil.targets 崩溃
180
177
  # 参考:v0.1.11 — undefined method 'targets' for nil
181
178
  unless @pods_project
182
- Pod::UI.message '[cocoapods-podgenerate] pods_project is nil — creating empty fallback'
179
+ Pod::UI.warn "[cocoapods-podgenerate] pods_project is nil from PodsProjectGenerator — creating empty fallback. This may indicate a CocoaPods internal error or an incompatible version."
183
180
  @pods_project = Pod::Project.new(sandbox.project_path)
184
181
  end
185
182
  @pod_target_subprojects = pod_project_generation_result.projects_by_pod_targets.keys
@@ -292,7 +289,7 @@ module Pod
292
289
  # 每个 scheme 文件是独立的 .xcscheme,存储在不同 xcodeproj 的
293
290
  # xcuserdata 目录中。每个 project 完全独立 → 无锁并行。
294
291
  def parallel_configure_schemes(projects_by_pod_targets, generator, generation_result)
295
- pool_size = [[Etc.nprocessors - 1, 2].max, 16].min
292
+ pool_size = Pod::PodGenerate::Parallel::ThreadPool.compute_pool_size
296
293
  Pod::UI.message "- Configuring schemes across #{projects_by_pod_targets.size} projects (pool: #{pool_size})"
297
294
 
298
295
  # L3 修复: defined? 精确检查类可用性,替代 rescue NameError
@@ -441,7 +438,7 @@ module Pod
441
438
  end
442
439
 
443
440
  # 多 target: 使用线程池并行集成(M3 修复)
444
- pool_size = [[Etc.nprocessors - 1, 2].max, 16].min
441
+ pool_size = Pod::PodGenerate::Parallel::ThreadPool.compute_pool_size
445
442
  pool = Concurrent::FixedThreadPool.new(pool_size)
446
443
 
447
444
  pods_to_integrate.each do |result|
@@ -25,7 +25,6 @@
25
25
  # - lib/cocoapods/installer/xcode/pods_project_generator.rb
26
26
 
27
27
  require 'concurrent'
28
- require 'etc'
29
28
 
30
29
  module Pod
31
30
  module PodGenerate
@@ -53,7 +52,7 @@ module Pod
53
52
  # pod target 名称到安装结果的映射
54
53
  def install_all_pod_targets(projects_by_pod_targets)
55
54
  UI.message '- Installing Pod Targets (parallel)' do
56
- pool_size = compute_pool_size
55
+ pool_size = Pod::PodGenerate::Parallel::ThreadPool.compute_pool_size
57
56
  mutex = Mutex.new
58
57
  all_results = {}
59
58
  errors = [] # v0.1.4: 收集错误而不是静默吞掉
@@ -90,14 +89,6 @@ module Pod
90
89
 
91
90
  private
92
91
 
93
- # 计算适合当前机器的线程池大小
94
- # 使用 CPU 核心数 - 1(为主线程留一个),最小 2,最大 16
95
- # @return [Integer]
96
- def compute_pool_size
97
- [[Etc.nprocessors - 1, 2].max, 16].min
98
- rescue NameError
99
- 4 # Etc 不可用时的安全回退
100
- end
101
92
  end
102
93
  end
103
94
  end
@@ -33,7 +33,6 @@
33
33
 
34
34
  require 'digest'
35
35
  require 'concurrent'
36
- require 'etc'
37
36
 
38
37
  module Pod
39
38
  module PodGenerate
@@ -142,7 +141,7 @@ module Pod
142
141
  # 每个 project 独立,使用 Concurrent::FixedThreadPool 并行执行。
143
142
  # 如果 concurrent-ruby 不可用(NameError),回退到串行处理。
144
143
  def parallel_cleanup_projects(projects)
145
- pool_size = compute_pool_size
144
+ pool_size = Pod::PodGenerate::Parallel::ThreadPool.compute_pool_size
146
145
  Pod::UI.message "- Cleaning up #{projects.size} projects (pool: #{pool_size})"
147
146
 
148
147
  pool = begin
@@ -187,7 +186,7 @@ module Pod
187
186
  # 预构建 native target → InstallationResult 的查找缓存(只读、线程安全)
188
187
  results_by_native_target = build_native_target_cache
189
188
 
190
- pool_size = compute_pool_size
189
+ pool_size = Pod::PodGenerate::Parallel::ThreadPool.compute_pool_size
191
190
  Pod::UI.message "- Recreating user schemes for #{projects.size} projects (pool: #{pool_size})"
192
191
 
193
192
  pool = begin
@@ -292,12 +291,6 @@ module Pod
292
291
  nil
293
292
  end
294
293
 
295
- # 计算线程池大小
296
- def compute_pool_size
297
- [[Etc.nprocessors - 1, 2].max, 16].min
298
- rescue NameError
299
- 4
300
- end
301
294
  end
302
295
  end
303
296
  end
@@ -15,7 +15,6 @@
15
15
  # - lib/cocoapods/installer/user_project_integrator.rb
16
16
 
17
17
  require 'concurrent'
18
- require 'etc'
19
18
 
20
19
  module Pod
21
20
  module PodGenerate
@@ -83,7 +82,8 @@ module Pod
83
82
  projects = projects.uniq
84
83
 
85
84
  if projects.size <= 1
86
- projects.each do |project|
85
+ project = projects.first
86
+ if project
87
87
  if project.dirty?
88
88
  project.save
89
89
  else
@@ -133,7 +133,7 @@ module Pod
133
133
  return
134
134
  end
135
135
 
136
- pool_size = compute_pool_size
136
+ pool_size = Pod::PodGenerate::Parallel::ThreadPool.compute_pool_size
137
137
  Pod::UI.message "- Checking xcconfig overrides for #{targets.size} targets (pool: #{pool_size})"
138
138
  pool = Concurrent::FixedThreadPool.new(pool_size)
139
139
  targets.each do |aggregate_target|
@@ -187,11 +187,6 @@ module Pod
187
187
  end
188
188
  end
189
189
 
190
- def compute_pool_size
191
- [[Etc.nprocessors - 1, 2].max, 16].min
192
- rescue NameError
193
- 4
194
- end
195
190
  end
196
191
  end
197
192
  end
@@ -23,7 +23,6 @@ require 'cocoapods-podgenerate/patches/user_integrator_patch'
23
23
  require 'cocoapods-podgenerate/patches/multi_project_generator_patch'
24
24
  require 'cocoapods-podgenerate/patches/cache_analyzer_patch'
25
25
  require 'cocoapods-podgenerate/parallel/thread_pool'
26
- require 'cocoapods-podgenerate/parallel/batch_processor'
27
26
  require 'cocoapods-podgenerate/benchmark/profiler'
28
27
 
29
28
  module Pod
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-podgenerate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - PodGenerate Team
@@ -90,7 +90,6 @@ files:
90
90
  - lib/cocoapods-podgenerate/benchmark/profiler.rb
91
91
  - lib/cocoapods-podgenerate/command.rb
92
92
  - lib/cocoapods-podgenerate/hooks.rb
93
- - lib/cocoapods-podgenerate/parallel/batch_processor.rb
94
93
  - lib/cocoapods-podgenerate/parallel/thread_pool.rb
95
94
  - lib/cocoapods-podgenerate/patches/analyzer_patch.rb
96
95
  - lib/cocoapods-podgenerate/patches/cache_analyzer_patch.rb
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # [cocoapods-podgenerate]
4
- # 批处理器 — 将工作项在线程池中并行分配处理。
5
- #
6
- # 用于将需要并行化的批量任务分配到 Concurrent::FixedThreadPool,
7
- # 保持结果的输入顺序(通过索引数组)。
8
- #
9
- # v0.1.4 改进:
10
- # - wait_for_termination 添加超时(120s)防止死锁
11
- # - 移除未使用的 batch_size 和 completed 变量
12
-
13
- require 'concurrent'
14
- require_relative 'thread_pool'
15
-
16
- module Pod
17
- module PodGenerate
18
- module Parallel
19
- module BatchProcessor
20
- # 在线程池中并行处理项目,保持结果的输入顺序
21
- #
22
- # @param items [Array] 要处理的项目列表
23
- # @param pool [Concurrent::FixedThreadPool] 线程池实例
24
- # @yield [item] 处理每个项目的代码块
25
- # @return [Array] 结果列表,顺序与输入相同(nil 表示处理失败的项目)
26
- def self.process(items, pool:, &block)
27
- return [] if items.empty?
28
-
29
- results = Array.new(items.size)
30
- mutex = Mutex.new
31
-
32
- items.each_with_index do |item, idx|
33
- pool.post do
34
- result = block.call(item)
35
- mutex.synchronize { results[idx] = result }
36
- rescue StandardError => e
37
- Pod::UI.warn "[cocoapods-podgenerate] BatchProcessor error on item #{idx}: #{e.message}"
38
- end
39
- end
40
-
41
- # v0.1.4: 带超时的等待
42
- pool.shutdown
43
- unless pool.wait_for_termination(Pod::PodGenerate::Parallel::ThreadPool::DEFAULT_TIMEOUT)
44
- Pod::UI.warn '[cocoapods-podgenerate] BatchProcessor timed out after 120s'
45
- pool.kill
46
- end
47
-
48
- results
49
- end
50
- end
51
- end
52
- end
53
- end