cocoapods-binary-cache 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 +4 -4
- data/lib/cocoapods-binary-cache/cache/validator_dependencies_graph.rb +1 -1
- data/lib/cocoapods-binary-cache/dependencies_graph/dependencies_graph.rb +21 -3
- data/lib/cocoapods-binary-cache/helper/checksum.rb +1 -1
- data/lib/cocoapods-binary-cache/pod-binary/integration/alter_specs.rb +5 -0
- data/lib/cocoapods-binary-cache/pod-binary/integration/patch/source_installation.rb +11 -1
- data/lib/cocoapods-binary-cache/pod-binary/prebuild.rb +1 -0
- data/lib/cocoapods-binary-cache/pod-rome/xcodebuild_command.rb +13 -4
- data/lib/cocoapods-binary-cache/pod-rome/xcodebuild_raw.rb +7 -1
- data/lib/command/config.rb +5 -0
- data/lib/command/executor/visualizer.rb +3 -1
- data/lib/command/visualize.rb +6 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e14f6a05df17d10b35b5ddfb5d263cdeaed50e4e3bf348b6606c27036317c173
|
4
|
+
data.tar.gz: 856426aa42021e6fc6b69f1de0be1e1fbc2dc96f0ac50b146f380280a3dee236
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '090730e3c268eb4f3dc0a1d0d07546e9ed4bc92dae2962a4ebc1d65f58996762aa1866414a683cf94ebee6894ebaec3d916a62cd7fe65295d9e2d6a576fb7488'
|
7
|
+
data.tar.gz: ee499933ce3bb03ec19eefcd52e50dc2170ed92e7f8f9c557e8a7c8d38f9ee1730402666937a494efe655604b320b5b6d012f31a982eb21051fab891a7367a69
|
@@ -8,7 +8,7 @@ module PodPrebuild
|
|
8
8
|
def validate(accumulated)
|
9
9
|
return accumulated if library_evolution_supported? || @pod_lockfile.nil?
|
10
10
|
|
11
|
-
dependencies_graph = DependenciesGraph.new(@pod_lockfile.lockfile)
|
11
|
+
dependencies_graph = DependenciesGraph.new(lockfile: @pod_lockfile.lockfile, invert_edge: true)
|
12
12
|
clients = dependencies_graph.get_clients(accumulated.discard(@ignored_pods).missed.to_a)
|
13
13
|
unless PodPrebuild.config.dev_pods_enabled?
|
14
14
|
clients = clients.reject { |client| @pod_lockfile.dev_pods.keys.include?(client) }
|
@@ -10,10 +10,12 @@ require_relative "graph_visualizer"
|
|
10
10
|
# https://github.com/monora/rgl/blob/master/lib/rgl/adjacency.rb
|
11
11
|
|
12
12
|
class DependenciesGraph
|
13
|
-
def initialize(
|
14
|
-
@lockfile = lockfile
|
13
|
+
def initialize(options)
|
14
|
+
@lockfile = options[:lockfile]
|
15
|
+
@devpod_only = options[:devpod_only]
|
16
|
+
@max_deps = options[:max_deps].to_i if options[:max_deps]
|
15
17
|
# A normal edge is an edge (one direction) from library A to library B which is a dependency of A.
|
16
|
-
@invert_edge =
|
18
|
+
@invert_edge = options[:invert_edge] || false
|
17
19
|
end
|
18
20
|
|
19
21
|
# Input : a list of library names.
|
@@ -40,6 +42,10 @@ class DependenciesGraph
|
|
40
42
|
@dependencies ||= (@lockfile && @lockfile.to_hash["PODS"])
|
41
43
|
end
|
42
44
|
|
45
|
+
def dev_pod_sources
|
46
|
+
@dev_pod_sources ||= @lockfile.to_hash["EXTERNAL SOURCES"].select { |_, attributes| attributes.key?(:path) } || {}
|
47
|
+
end
|
48
|
+
|
43
49
|
# Convert array of dictionaries -> a dictionary with format {A: [A's dependencies]}
|
44
50
|
def pod_to_dependencies
|
45
51
|
dependencies
|
@@ -49,6 +55,8 @@ class DependenciesGraph
|
|
49
55
|
|
50
56
|
def add_vertex(graph, pod)
|
51
57
|
node_name = sanitized_pod_name(pod)
|
58
|
+
return if @devpod_only && dev_pod_sources[node_name].nil?
|
59
|
+
|
52
60
|
graph.add_vertex(node_name)
|
53
61
|
node_name
|
54
62
|
end
|
@@ -57,10 +65,20 @@ class DependenciesGraph
|
|
57
65
|
Pod::Dependency.from_string(name).name
|
58
66
|
end
|
59
67
|
|
68
|
+
def reach_max_deps(deps)
|
69
|
+
return unless @max_deps
|
70
|
+
return deps.count > @max_deps unless @devpod_only
|
71
|
+
|
72
|
+
deps = deps.reject { |name| dev_pod_sources[name].nil? }
|
73
|
+
deps.count > @max_deps
|
74
|
+
end
|
75
|
+
|
60
76
|
def graph
|
61
77
|
@graph ||= begin
|
62
78
|
graph = RGL::DirectedAdjacencyGraph.new
|
63
79
|
pod_to_dependencies.each do |pod, dependencies|
|
80
|
+
next if reach_max_deps(dependencies)
|
81
|
+
|
64
82
|
pod_node = add_vertex(graph, pod)
|
65
83
|
next if pod_node.nil?
|
66
84
|
|
@@ -5,7 +5,7 @@ require "digest/md5"
|
|
5
5
|
|
6
6
|
class FolderChecksum
|
7
7
|
def self.git_checksum(dir)
|
8
|
-
checksum_of_files(`git ls-files #{dir}`.split("\n"))
|
8
|
+
checksum_of_files(`git ls-files #{File.realdirpath(dir).shellescape}`.split("\n"))
|
9
9
|
rescue => e
|
10
10
|
Pod::UI.warn "Cannot get checksum of tracked files under #{dir}: #{e}"
|
11
11
|
checksum_of_files(Dir["#{dir}/**/*"].reject { |f| File.directory?(f) })
|
@@ -2,6 +2,11 @@ module Pod
|
|
2
2
|
class Installer
|
3
3
|
def alter_specs_for_prebuilt_pods
|
4
4
|
cache = []
|
5
|
+
|
6
|
+
@original_specs = analysis_result.specifications
|
7
|
+
.map { |spec| [spec.name, Pod::Specification.from_file(spec.defined_in_file)] }
|
8
|
+
.to_h
|
9
|
+
|
5
10
|
analysis_result.specifications
|
6
11
|
.select { |spec| should_integrate_prebuilt_pod?(spec.root.name) }
|
7
12
|
.group_by(&:root)
|
@@ -18,8 +18,18 @@ module Pod
|
|
18
18
|
original_create_pod_installer(name)
|
19
19
|
end
|
20
20
|
|
21
|
+
def original_specs_by_platform(name)
|
22
|
+
specs_for_pod(name).map do |platform, specs|
|
23
|
+
specs_ = specs.map { |spec| @original_specs[spec.name] }
|
24
|
+
[platform, specs_]
|
25
|
+
end.to_h
|
26
|
+
end
|
27
|
+
|
21
28
|
def create_prebuilt_source_installer(name)
|
22
|
-
|
29
|
+
# A source installer needs to install with the original spec (instead of the altered spec).
|
30
|
+
# Otherwise, the cache will be corrupted because CocoaPods packs necessary dirs/files from temp dir
|
31
|
+
# to the cache dir based on the spec.
|
32
|
+
source_installer = PodSourceInstaller.new(sandbox, podfile, original_specs_by_platform(name))
|
23
33
|
pod_installer = PrebuiltSourceInstaller.new(
|
24
34
|
sandbox,
|
25
35
|
podfile,
|
@@ -58,6 +58,7 @@ module Pod
|
|
58
58
|
bitcode_enabled: PodPrebuild.config.bitcode_enabled?,
|
59
59
|
device_build_enabled: PodPrebuild.config.device_build_enabled?,
|
60
60
|
disable_dsym: PodPrebuild.config.disable_dsym?,
|
61
|
+
log_path: PodPrebuild.config.xcodebuild_log_path,
|
61
62
|
args: PodPrebuild.config.build_args
|
62
63
|
)
|
63
64
|
PodPrebuild.remove_build_dir(sandbox_path)
|
@@ -43,6 +43,10 @@ module PodPrebuild
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
+
def preferred_sdk
|
47
|
+
@preferred_sdk ||= sdks.include?(device) ? device : sdks[0]
|
48
|
+
end
|
49
|
+
|
46
50
|
def build_types
|
47
51
|
@build_types ||= begin
|
48
52
|
# TODO (thuyen): Add DSL options `build_for_types` to specify build types
|
@@ -78,15 +82,16 @@ module PodPrebuild
|
|
78
82
|
configuration: configuration,
|
79
83
|
sdk: sdk,
|
80
84
|
deployment_target: targets.map { |t| t.platform.deployment_target }.max.to_s,
|
85
|
+
log_path: log_path(sdk),
|
81
86
|
args: sdk == simulator ? @build_args[:simulator] : @build_args[:device]
|
82
87
|
)
|
83
88
|
end
|
84
89
|
|
85
90
|
def create_xcframework(target)
|
86
|
-
non_framework_paths = Dir[target_products_dir_of(target,
|
87
|
-
- [framework_path_of(target,
|
88
|
-
- dsym_paths_of(target,
|
89
|
-
- bcsymbolmap_paths_of(target,
|
91
|
+
non_framework_paths = Dir[target_products_dir_of(target, preferred_sdk) + "/*"] \
|
92
|
+
- [framework_path_of(target, preferred_sdk)] \
|
93
|
+
- dsym_paths_of(target, preferred_sdk) \
|
94
|
+
- bcsymbolmap_paths_of(target, preferred_sdk)
|
90
95
|
collect_output(target, non_framework_paths)
|
91
96
|
|
92
97
|
output = "#{output_path(target)}/#{target.product_module_name}.xcframework"
|
@@ -248,5 +253,9 @@ module PodPrebuild
|
|
248
253
|
def disable_dsym?
|
249
254
|
@options[:disable_dsym]
|
250
255
|
end
|
256
|
+
|
257
|
+
def log_path(sdk)
|
258
|
+
@options[:log_path].nil? ? nil : "#{@options[:log_path]}_#{sdk}"
|
259
|
+
end
|
251
260
|
end
|
252
261
|
end
|
@@ -32,7 +32,13 @@ module PodPrebuild
|
|
32
32
|
end
|
33
33
|
cmd += options[:args] if options[:args]
|
34
34
|
cmd << "build"
|
35
|
-
|
35
|
+
|
36
|
+
if options[:log_path].nil?
|
37
|
+
cmd << "2>&1"
|
38
|
+
else
|
39
|
+
FileUtils.mkdir_p(File.dirname(options[:log_path]))
|
40
|
+
cmd << "> #{options[:log_path].shellescape}"
|
41
|
+
end
|
36
42
|
cmd = cmd.join(" ")
|
37
43
|
|
38
44
|
Pod::UI.puts_indented "$ #{cmd}" unless PodPrebuild.config.silent_build?
|
data/lib/command/config.rb
CHANGED
@@ -117,6 +117,10 @@ module PodPrebuild
|
|
117
117
|
@dsl_config[:dont_remove_source_code]
|
118
118
|
end
|
119
119
|
|
120
|
+
def xcodebuild_log_path
|
121
|
+
@dsl_config[:xcodebuild_log_path]
|
122
|
+
end
|
123
|
+
|
120
124
|
def build_args
|
121
125
|
@dsl_config[:build_args]
|
122
126
|
end
|
@@ -178,6 +182,7 @@ module PodPrebuild
|
|
178
182
|
:xcframework,
|
179
183
|
:disable_dsym,
|
180
184
|
:dont_remove_source_code,
|
185
|
+
:xcodebuild_log_path,
|
181
186
|
:build_args,
|
182
187
|
:save_cache_validation_to,
|
183
188
|
:validate_prebuilt_settings,
|
@@ -8,11 +8,13 @@ module PodPrebuild
|
|
8
8
|
@lockfile = options[:lockfile]
|
9
9
|
@open = options[:open]
|
10
10
|
@output_dir = options[:output_dir]
|
11
|
+
@devpod_only = options[:devpod_only]
|
12
|
+
@max_deps = options[:max_deps]
|
11
13
|
end
|
12
14
|
|
13
15
|
def run
|
14
16
|
FileUtils.mkdir_p(@output_dir)
|
15
|
-
graph = DependenciesGraph.new(@lockfile)
|
17
|
+
graph = DependenciesGraph.new(lockfile: @lockfile, devpod_only: @devpod_only, max_deps: @max_deps)
|
16
18
|
output_path = "#{@output_dir}/graph.png"
|
17
19
|
graph.write_graphic_file(output_path: output_path)
|
18
20
|
system("open #{@output_path}") if @open
|
data/lib/command/visualize.rb
CHANGED
@@ -7,7 +7,9 @@ module Pod
|
|
7
7
|
self.arguments = [CLAide::Argument.new("OUTPUT-DIR", false)]
|
8
8
|
def self.options
|
9
9
|
[
|
10
|
-
["--open", "Open the graph upon completion"]
|
10
|
+
["--open", "Open the graph upon completion"],
|
11
|
+
["--devpod_only", "Only include development pod"],
|
12
|
+
["--max_deps", "Only include pod with number of dependencies <= max_deps"]
|
11
13
|
]
|
12
14
|
end
|
13
15
|
|
@@ -17,7 +19,9 @@ module Pod
|
|
17
19
|
config: prebuild_config,
|
18
20
|
lockfile: config.lockfile,
|
19
21
|
output_dir: argv.shift_argument || ".",
|
20
|
-
open: argv.flag?("open")
|
22
|
+
open: argv.flag?("open"),
|
23
|
+
devpod_only: argv.flag?("devpod_only"),
|
24
|
+
max_deps: argv.option("max_deps")
|
21
25
|
)
|
22
26
|
end
|
23
27
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-binary-cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bang Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cocoapods
|
@@ -200,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
200
|
- !ruby/object:Gem::Version
|
201
201
|
version: '0'
|
202
202
|
requirements: []
|
203
|
-
rubygems_version: 3.
|
203
|
+
rubygems_version: 3.1.2
|
204
204
|
signing_key:
|
205
205
|
specification_version: 4
|
206
206
|
summary: Reduce build time by building pod frameworks and cache to remote storage,
|