cocoapods-binary-cache 0.1.13 → 0.1.14
Sign up to get free protection for your applications and to get access to all the features.
- 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,
|