cocoapods-binary-cache 0.1.6 → 0.1.7

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: afe99f8a6986c687fb8033d369ffd7db7ac4543782070d386de8ca20d7e303f5
4
- data.tar.gz: 8424f90961d5bd08d827ce427f576869b059172b1a07a89e9ff85b012299f0d7
3
+ metadata.gz: e068bdcb9e91a8e599e3ad1732837a1a7dbd49a4409e05b97b1cdc476bfb76a7
4
+ data.tar.gz: 21d3e3fa0374a8818efa927bb822ce9386e43e18ec26a1ab5be7d8b481a688d6
5
5
  SHA512:
6
- metadata.gz: '09b307361741d28ea6d3343061e9baff47d9eb477ce6c31771b2d0ac3893389e34f48b9cd8b41a9337e22225bf6accbbf402445549d07d733575e19602a33b34'
7
- data.tar.gz: d8c33dd9aac8606cb853d6dd3d4cf20cabec06f17974ae7248ff632bb6e34e43a5e3be98357bc975ef9229a9418cfdc463d5b8093e829babde8ab642c157249b
6
+ metadata.gz: f5588698b1d818071b2bfb568bcbd44bc1e02084f7caf0b4b554a50277f2064209ec527339de4c8166ab74ff358b0a173f149b5db67f33a808c8d562f8d02625
7
+ data.tar.gz: dd21d19ff94f2a8dcf3b4b1dd7372484993e0aba4705512fde75be14e66d72ddadc592fc88b9ea81ae3983f156e5fe251e4dbcfe8047f7904db1b0fd3cf0cbcf
@@ -5,7 +5,7 @@ module PodPrebuild
5
5
  PodPrebuild::PodfileChangesCacheValidator.new(options),
6
6
  PodPrebuild::NonDevPodsCacheValidator.new(options)
7
7
  ]
8
- @validators << PodPrebuild::DevPodsCacheValidator.new(options) if Pod::Podfile::DSL.dev_pods_enabled?
8
+ @validators << PodPrebuild::DevPodsCacheValidator.new(options) if PodPrebuild.config.dev_pods_enabled?
9
9
  @validators << PodPrebuild::DependenciesGraphCacheValidator.new(options)
10
10
  @validators << PodPrebuild::ExclusionCacheValidator.new(options)
11
11
  end
@@ -10,7 +10,7 @@ module PodPrebuild
10
10
 
11
11
  dependencies_graph = DependenciesGraph.new(@pod_lockfile.lockfile)
12
12
  clients = dependencies_graph.get_clients(accumulated.discard(@ignored_pods).missed.to_a)
13
- unless Pod::Podfile::DSL.dev_pods_enabled?
13
+ unless PodPrebuild.config.dev_pods_enabled?
14
14
  clients = clients.reject { |client| @pod_lockfile.dev_pods.keys.include?(client) }
15
15
  end
16
16
 
@@ -3,14 +3,16 @@ require_relative "base"
3
3
  module PodPrebuild
4
4
  class IntegrationDiagnosis < BaseDiagnosis
5
5
  def run
6
- should_be_integrated = if Pod::Podfile::DSL.prebuild_job? \
6
+ should_be_integrated = if PodPrebuild.config.prebuild_job? \
7
7
  then @cache_validation.hit + @cache_validation.missed \
8
8
  else @cache_validation.hit \
9
9
  end
10
10
  should_be_integrated = should_be_integrated.map { |name| name.split("/")[0] }.to_set
11
11
  unintegrated = should_be_integrated.reject do |name|
12
12
  module_name = spec(name)&.module_name || name
13
- framework_path = @standard_sandbox.pod_dir(name) + "#{module_name}.framework"
13
+ framework_path = \
14
+ @standard_sandbox.pod_dir(name) + \
15
+ PodPrebuild.config.prebuilt_path(path: "#{module_name}.framework")
14
16
  framework_path.exist?
15
17
  end
16
18
  Pod::UI.puts "🚩 Unintegrated frameworks: #{unintegrated}".yellow unless unintegrated.empty?
@@ -13,7 +13,7 @@ module PodPrebuild
13
13
  end
14
14
 
15
15
  def stages
16
- @stages ||= Pod::Podfile::DSL.prebuild_job? ? [:prebuild, :integration] : [:integration]
16
+ @stages ||= PodPrebuild.config.prebuild_job? ? [:prebuild, :integration] : [:integration]
17
17
  end
18
18
 
19
19
  def current_stage
@@ -22,7 +22,7 @@ module PodPrebuild
22
22
  end
23
23
 
24
24
  def edit_scheme_for_code_coverage
25
- return unless Pod::Podfile::DSL.dev_pods_enabled? && @installer_context.sandbox.instance_of?(Pod::PrebuildSandbox)
25
+ return unless PodPrebuild.config.dev_pods_enabled? && @installer_context.sandbox.instance_of?(Pod::PrebuildSandbox)
26
26
 
27
27
  # Modify pods scheme to support code coverage
28
28
  # If we don't prebuild dev pod -> no need to care about this in Pod project
@@ -24,7 +24,7 @@ module PodPrebuild
24
24
  create_prebuild_sandbox
25
25
  Pod::UI.section("Detect implicit dependencies") { detect_implicit_dependencies }
26
26
  Pod::UI.section("Validate prebuilt cache") { validate_cache }
27
- prebuild! if Pod::Podfile::DSL.prebuild_job?
27
+ prebuild! if PodPrebuild.config.prebuild_job?
28
28
  Pod::UI.section("Reset environment") { reset_environment }
29
29
 
30
30
  PodPrebuild::Env.next_stage!
@@ -72,7 +72,7 @@ module PodPrebuild
72
72
  # Note: DSL is reloaded when creating an installer (Pod::Installer.new).
73
73
  # Any mutation to DSL is highly discouraged
74
74
  # --> Rather, perform mutation on PodPrebuild::StateStore instead
75
- PodPrebuild::StateStore.excluded_pods += Pod::Podfile::DSL.excluded_pods
75
+ PodPrebuild::StateStore.excluded_pods += PodPrebuild.config.excluded_pods
76
76
  end
77
77
 
78
78
  def create_prebuild_sandbox
@@ -101,13 +101,13 @@ module PodPrebuild
101
101
  podfile: podfile,
102
102
  pod_lockfile: installer_context.lockfile,
103
103
  prebuilt_lockfile: prebuilt_lockfile,
104
- validate_prebuilt_settings: Pod::Podfile::DSL.validate_prebuilt_settings,
104
+ validate_prebuilt_settings: PodPrebuild.config.validate_prebuilt_settings,
105
105
  generated_framework_path: prebuild_sandbox.generate_framework_path,
106
106
  sandbox_root: prebuild_sandbox.root,
107
107
  ignored_pods: PodPrebuild::StateStore.excluded_pods,
108
108
  prebuilt_pod_names: @original_installer.prebuilt_pod_names
109
109
  ).validate
110
- path_to_save_cache_validation = Pod::Podfile::DSL.save_cache_validation_to
110
+ path_to_save_cache_validation = PodPrebuild.config.save_cache_validation_to
111
111
  @cache_validation.update_to(path_to_save_cache_validation) unless path_to_save_cache_validation.nil?
112
112
  cache_validation.print_summary
113
113
  PodPrebuild::StateStore.cache_validation = cache_validation
@@ -17,7 +17,7 @@ module Pod
17
17
  targets = pod_targets.select { |target| explicit_prebuilt_pod_names.include?(target.pod_name) }
18
18
  dependencies = targets.flat_map(&:recursive_dependent_targets) # Treat dependencies as prebuilt pods
19
19
  all = (targets + dependencies).uniq
20
- all = all.reject { |target| sandbox.local?(target.pod_name) } unless Podfile::DSL.dev_pods_enabled?
20
+ all = all.reject { |target| sandbox.local?(target.pod_name) } unless PodPrebuild.config.dev_pods_enabled?
21
21
  all
22
22
  end
23
23
  end
@@ -4,7 +4,7 @@ module Pod
4
4
  class PrebuildSandbox < Sandbox
5
5
  # [String] standard_sandbox_path
6
6
  def self.from_standard_sanbox_path(path)
7
- prebuild_sandbox_path = Pathname.new(path).realpath + ".." + PodPrebuild::Config.instance.prebuild_path
7
+ prebuild_sandbox_path = Pathname.new(path).realpath + ".." + PodPrebuild.config.prebuild_sandbox_path
8
8
  self.new(prebuild_sandbox_path)
9
9
  end
10
10
 
@@ -15,6 +15,7 @@ module Pod
15
15
  # as to compitable with older version and be less wordy.
16
16
  framework_file_path = target.framework_name
17
17
  framework_file_path = target.name + "/" + framework_file_path if targets.count > 1
18
+ framework_file_path = PodPrebuild.config.prebuilt_path(path: framework_file_path)
18
19
  add_vendered_framework(spec, target.platform.name.to_s, framework_file_path)
19
20
  end
20
21
 
@@ -61,7 +62,9 @@ module Pod
61
62
  attributes["resource_bundles"] = nil
62
63
  attributes["resources"] ||= []
63
64
  attributes["resources"] = [attributes["resources"]] if attributes["resources"].is_a?(String)
64
- attributes["resources"] += resource_bundle_names.map { |n| n + ".bundle" }
65
+ attributes["resources"] += resource_bundle_names.map do |name|
66
+ PodPrebuild.config.prebuilt_path(path: "#{name}.bundle")
67
+ end
65
68
  end
66
69
 
67
70
  add_resource_bundles_to_resources.call(spec.attributes_hash)
@@ -17,13 +17,13 @@ module Pod
17
17
  end
18
18
 
19
19
  def should_integrate_prebuilt_pod?(name)
20
- if Pod::Podfile::DSL.prebuild_job? && Pod::Podfile::DSL.targets_to_prebuild_from_cli.empty?
20
+ if PodPrebuild.config.prebuild_job? && PodPrebuild.config.targets_to_prebuild_from_cli.empty?
21
21
  # In a prebuild job, at the integration stage, all prebuilt frameworks should be
22
22
  # ready for integration regardless of whether there was any cache miss or not.
23
23
  # Those that are missed were prebuilt in the prebuild stage.
24
24
  PodPrebuild::StateStore.cache_validation.include?(name)
25
25
  else
26
- prebuilt = PodPrebuild::StateStore.cache_validation.hit + Pod::Podfile::DSL.targets_to_prebuild_from_cli
26
+ prebuilt = PodPrebuild::StateStore.cache_validation.hit + PodPrebuild.config.targets_to_prebuild_from_cli
27
27
  prebuilt.include?(name)
28
28
  end
29
29
  end
@@ -11,70 +11,34 @@ module Pod
11
11
  class Installer
12
12
  class PodSourceInstaller
13
13
  def install_for_prebuild!(standard_sanbox)
14
- return if !Podfile::DSL.dev_pods_enabled? && standard_sanbox.local?(name)
14
+ return if !PodPrebuild.config.dev_pods_enabled? && standard_sanbox.local?(name)
15
15
 
16
16
  # make a symlink to target folder
17
17
  # TODO (bang): Unify to 1 sandbox to optimize and avoid inconsistency
18
18
  prebuild_sandbox = Pod::PrebuildSandbox.from_standard_sandbox(standard_sanbox)
19
19
  # if spec used in multiple platforms, it may return multiple paths
20
- target_names = prebuild_sandbox.existed_target_names_for_pod_name(self.name)
21
-
22
- def walk(path, &action)
23
- return unless path.exist?
24
- path.children.each do |child|
25
- result = action.call(child, &action)
26
- if child.directory?
27
- walk(child, &action) if result
28
- end
29
- end
30
- end
31
-
32
- def make_link(source, target)
33
- source = Pathname.new(source)
34
- target = Pathname.new(target)
35
- target.parent.mkpath unless target.parent.exist?
36
- relative_source = source.relative_path_from(target.parent)
37
- FileUtils.ln_sf(relative_source, target)
38
- end
39
-
40
- def mirror_with_symlink(source, basefolder, target_folder)
41
- target = target_folder + source.relative_path_from(basefolder)
42
- make_link(source, target)
43
- end
44
-
20
+ target_names = prebuild_sandbox.existed_target_names_for_pod_name(name)
45
21
  target_names.each do |name|
46
-
47
- # symbol link copy all substructure
48
22
  real_file_folder = prebuild_sandbox.framework_folder_path_for_target_name(name)
49
23
 
50
24
  # If have only one platform, just place int the root folder of this pod.
51
25
  # If have multiple paths, we use a sperated folder to store different
52
26
  # platform frameworks. e.g. AFNetworking/AFNetworking-iOS/AFNetworking.framework
53
-
54
27
  target_folder = standard_sanbox.pod_dir(self.name)
55
- if target_names.count > 1
56
- target_folder += real_file_folder.basename
57
- end
58
-
59
- if !standard_sanbox.local?(name)
60
- target_folder.rmtree if target_folder.exist?
61
- target_folder.mkpath
62
- else
63
- system "find #{target_folder} -type l -delete" # Only clean up symlink, keep source code for local pod
64
- end
28
+ target_folder += real_file_folder.basename if target_names.count > 1
29
+ target_folder += PodPrebuild.config.prebuilt_path
30
+ target_folder.rmtree if target_folder.exist?
31
+ target_folder.mkpath
65
32
 
66
33
  walk(real_file_folder) do |child|
67
34
  source = child
68
35
  # only make symlink to file and `.framework` folder
69
- if child.directory? and [".framework", ".dSYM"].include? child.extname
70
- if child.extname == ".framework"
71
- mirror_with_symlink(source, real_file_folder, target_folder)
72
- else
73
- # Ignore dsym here to avoid cocoapods from adding install_dsym to buildphase-script
74
- # That can cause duplicated output files error in Xcode 11 (warning in Xcode 10)
75
- # We need more setup to support local debuging with prebuilt dSYM
76
- end
77
- next false # return false means don't go deeper
36
+ if child.directory? && [".framework", ".dSYM"].include?(child.extname)
37
+ mirror_with_symlink(source, real_file_folder, target_folder) if child.extname == ".framework"
38
+ # Ignore dsym here to avoid cocoapods from adding install_dsym to buildphase-script
39
+ # That can cause duplicated output files error in Xcode 11 (warning in Xcode 10)
40
+ # We need more setup to support local debuging with prebuilt dSYM
41
+ next false # Don't go deeper
78
42
  elsif child.file?
79
43
  mirror_with_symlink(source, real_file_folder, target_folder)
80
44
  next true
@@ -88,8 +52,9 @@ module Pod
88
52
  next unless metadata.static_framework?
89
53
 
90
54
  metadata.resources.each do |path|
91
- target_file_path = path.sub("${PODS_ROOT}", sandbox.root.to_path)
92
- .sub("${PODS_CONFIGURATION_BUILD_DIR}", sandbox.root.to_path)
55
+ target_file_path = path
56
+ .sub("${PODS_ROOT}", sandbox.root.to_path)
57
+ .sub("${PODS_CONFIGURATION_BUILD_DIR}", sandbox.root.to_path)
93
58
  real_file_path = real_file_folder + metadata.framework_name + File.basename(path)
94
59
  case File.extname(path)
95
60
  when ".xib"
@@ -107,6 +72,32 @@ module Pod
107
72
  end
108
73
  end
109
74
  end
75
+
76
+ private
77
+
78
+ def walk(path, &action)
79
+ return unless path.exist?
80
+
81
+ path.children.each do |child|
82
+ result = action.call(child, &action)
83
+ if child.directory?
84
+ walk(child, &action) if result
85
+ end
86
+ end
87
+ end
88
+
89
+ def make_link(source, target)
90
+ source = Pathname.new(source)
91
+ target = Pathname.new(target)
92
+ target.rmtree if target.exist?
93
+ target.parent.mkpath unless target.parent.exist?
94
+ relative_source = source.relative_path_from(target.parent)
95
+ FileUtils.ln_sf(relative_source, target)
96
+ end
97
+
98
+ def mirror_with_symlink(source, basefolder, target_folder)
99
+ make_link(source, target_folder + source.relative_path_from(basefolder))
100
+ end
110
101
  end
111
102
  end
112
103
  end
@@ -44,14 +44,14 @@ module Pod
44
44
 
45
45
  def should_not_prebuild_vendor_pod(name)
46
46
  return true if blacklisted?(name)
47
- return false if Pod::Podfile::DSL.prebuild_all_pods?
47
+ return false if PodPrebuild.config.prebuild_all_pods?
48
48
  end
49
49
 
50
50
  def run_code_gen!(targets)
51
- return if Pod::Podfile::DSL.prebuild_code_gen.nil?
51
+ return if PodPrebuild.config.prebuild_code_gen.nil?
52
52
 
53
53
  Pod::UI.title("Running code generation...") do
54
- Pod::Podfile::DSL.prebuild_code_gen.call(self, targets)
54
+ PodPrebuild.config.prebuild_code_gen.call(self, targets)
55
55
  end
56
56
  end
57
57
 
@@ -59,10 +59,10 @@ module Pod
59
59
  existed_framework_folder = sandbox.generate_framework_path
60
60
  targets = pod_targets
61
61
 
62
- targets_from_cli = Pod::Podfile::DSL.targets_to_prebuild_from_cli
62
+ targets_from_cli = PodPrebuild.config.targets_to_prebuild_from_cli
63
63
  if !targets_from_cli.empty?
64
64
  targets = targets.select { |target| targets_from_cli.include?(target.name) }
65
- elsif !Pod::Podfile::DSL.prebuild_all_pods? && !local_manifest.nil?
65
+ elsif !PodPrebuild.config.prebuild_all_pods? && !local_manifest.nil?
66
66
  changes = prebuild_pods_changes
67
67
  added = changes.added
68
68
  changed = changes.changed
@@ -91,11 +91,11 @@ module Pod
91
91
  targets = (targets + dependency_targets).uniq
92
92
  end
93
93
 
94
- unless Pod::Podfile::DSL.prebuild_all_pods?
94
+ unless PodPrebuild.config.prebuild_all_pods?
95
95
  targets = targets.select { |pod_target| cache_missed?(pod_target.name) }
96
96
  end
97
97
  targets = targets.reject { |pod_target| should_not_prebuild_vendor_pod(pod_target.name) }
98
- unless Podfile::DSL.dev_pods_enabled?
98
+ unless PodPrebuild.config.dev_pods_enabled?
99
99
  targets = targets.reject { |pod_target| sandbox.local?(pod_target.pod_name) }
100
100
  end
101
101
  targets
@@ -123,12 +123,12 @@ module Pod
123
123
  Pod::Prebuild.build(
124
124
  sandbox: sandbox_path,
125
125
  target: target,
126
- configuration: Pod::Podfile::DSL.prebuild_config,
126
+ configuration: PodPrebuild.config.prebuild_config,
127
127
  output_path: output_path,
128
- bitcode_enabled: Pod::Podfile::DSL.bitcode_enabled?,
129
- device_build_enabled: Pod::Podfile::DSL.device_build_enabled?,
130
- disable_dsym: Pod::Podfile::DSL.disable_dsym?,
131
- args: Pod::Podfile::DSL.build_args
128
+ bitcode_enabled: PodPrebuild.config.bitcode_enabled?,
129
+ device_build_enabled: PodPrebuild.config.device_build_enabled?,
130
+ disable_dsym: PodPrebuild.config.disable_dsym?,
131
+ args: PodPrebuild.config.build_args
132
132
  )
133
133
  collect_metadata(target, output_path)
134
134
  end
@@ -178,7 +178,7 @@ module Pod
178
178
  path.rmtree if path.exist?
179
179
  end
180
180
 
181
- if Podfile::DSL.dont_remove_source_code?
181
+ if PodPrebuild.config.dont_remove_source_code?
182
182
  # just remove the tmp files
183
183
  path = sandbox.root + "Manifest.lock.tmp"
184
184
  path.rmtree if path.exist?
@@ -215,7 +215,7 @@ module Pod
215
215
  metadata.build_settings = pods_project.targets
216
216
  .detect { |native_target| native_target.name == target.name }
217
217
  .build_configurations
218
- .detect { |config| config.name == Pod::Podfile::DSL.prebuild_config }
218
+ .detect { |config| config.name == PodPrebuild.config.prebuild_config }
219
219
  .build_settings
220
220
  metadata.source_hash = @lockfile_wrapper && @lockfile_wrapper.dev_pod_hash(target.name)
221
221
 
@@ -3,71 +3,9 @@ require_relative "tool/tool"
3
3
  module Pod
4
4
  class Podfile
5
5
  module DSL
6
- @binary_cache_config = {}
7
- @binary_cache_cli_config = {}
8
6
  def config_cocoapods_binary_cache(options)
9
- Pod::Podfile::DSL.binary_cache_config = options
10
- end
11
-
12
- class << self
13
- attr_accessor :binary_cache_config
14
- attr_accessor :binary_cache_cli_config
15
-
16
- def prebuild_config
17
- @binary_cache_config[:prebuild_config] || "Debug"
18
- end
19
-
20
- def prebuild_job?
21
- @binary_cache_cli_config[:prebuild_job] || @binary_cache_config[:prebuild_job]
22
- end
23
-
24
- def prebuild_all_pods?
25
- @binary_cache_cli_config[:prebuild_all_pods] || @binary_cache_config[:prebuild_all_pods]
26
- end
27
-
28
- def excluded_pods
29
- @binary_cache_config[:excluded_pods] || Set.new
30
- end
31
-
32
- def dev_pods_enabled?
33
- @binary_cache_config[:dev_pods_enabled]
34
- end
35
-
36
- def bitcode_enabled?
37
- @binary_cache_config[:bitcode_enabled]
38
- end
39
-
40
- def device_build_enabled?
41
- @binary_cache_config[:device_build_enabled]
42
- end
43
-
44
- def disable_dsym?
45
- @binary_cache_config[:disable_dsym]
46
- end
47
-
48
- def dont_remove_source_code?
49
- @binary_cache_config[:dont_remove_source_code]
50
- end
51
-
52
- def build_args
53
- @binary_cache_config[:build_args]
54
- end
55
-
56
- def save_cache_validation_to
57
- @binary_cache_config[:save_cache_validation_to]
58
- end
59
-
60
- def validate_prebuilt_settings
61
- @binary_cache_config[:validate_prebuilt_settings]
62
- end
63
-
64
- def prebuild_code_gen
65
- @binary_cache_config[:prebuild_code_gen]
66
- end
67
-
68
- def targets_to_prebuild_from_cli
69
- @binary_cache_cli_config[:prebuild_targets] || []
70
- end
7
+ PodPrebuild.config.dsl_config = options
8
+ PodPrebuild.config.validate_dsl_config
71
9
  end
72
10
  end
73
11
  end
@@ -8,7 +8,7 @@ module PodPrebuild
8
8
  end
9
9
 
10
10
  def prebuild_delta_path
11
- @prebuild_delta_path ||= PodPrebuild::Config.instance.prebuild_delta_path
11
+ @prebuild_delta_path ||= PodPrebuild.config.prebuild_delta_path
12
12
  end
13
13
 
14
14
  def delta_dir
@@ -12,7 +12,7 @@ class SchemeEditor
12
12
  scheme_name = File.basename(file_path, '.*')
13
13
  next unless sandbox.local?(scheme_name)
14
14
 
15
- puts "Modify scheme to enable coverage symbol when prebuild: #{scheme_name}"
15
+ Pod::UI.message "Modify scheme to enable coverage symbol when prebuild: #{scheme_name}"
16
16
 
17
17
  doc = File.open(file_path, 'r') { |f| REXML::Document.new(f) }
18
18
  scheme = doc.elements['Scheme']
@@ -9,9 +9,28 @@ module Pod
9
9
  class Command
10
10
  class Binary < Command
11
11
  self.abstract_command = true
12
+ def self.options
13
+ [
14
+ ["--repo", "Cache repo (in accordance with `cache_repo` in `config_cocoapods_binary_cache`)"]
15
+ ]
16
+ end
17
+
18
+ def initialize(argv)
19
+ super
20
+ load_podfile
21
+ update_cli_config(:repo => argv.option("repo"))
22
+ end
12
23
 
13
24
  def prebuild_config
14
- @prebuild_config ||= PodPrebuild::Config.instance
25
+ @prebuild_config ||= PodPrebuild.config
26
+ end
27
+
28
+ def load_podfile
29
+ Pod::Config.instance.podfile
30
+ end
31
+
32
+ def update_cli_config(options)
33
+ PodPrebuild.config.cli_config.merge!(options)
15
34
  end
16
35
  end
17
36
  end
@@ -1,31 +1,172 @@
1
1
  require_relative "../cocoapods-binary-cache/helper/json"
2
2
 
3
3
  module PodPrebuild
4
+ def self.config
5
+ PodPrebuild::Config.instance
6
+ end
7
+
4
8
  class Config
5
- attr_reader :cache_repo, :cache_path, :prebuild_path, :prebuild_delta_path
9
+ attr_accessor :dsl_config, :cli_config
6
10
 
7
11
  def initialize(path)
8
- @data = PodPrebuild::JSONFile.new(path)
9
- @cache_repo = @data["cache_repo"] || @data["prebuilt_cache_repo"]
10
- @cache_path = File.expand_path(@data["cache_path"])
11
- @prebuild_path = @data["prebuild_path"] || "_Prebuild"
12
- @prebuild_delta_path = @data["prebuild_delta_path"] || "_Prebuild_delta/changes.json"
12
+ @deprecated_config = File.exist?(path) ? PodPrebuild::JSONFile.new(path).data : {}
13
+ @dsl_config = {}
14
+ @cli_config = {}
13
15
  end
14
16
 
15
17
  def self.instance
16
18
  @instance ||= new("PodBinaryCacheConfig.json")
17
19
  end
18
20
 
21
+ def reset!
22
+ @deprecated_config = {}
23
+ @dsl_config = {}
24
+ @cli_config = {}
25
+ end
26
+
27
+ def cache_repo
28
+ @cache_repo ||= cache_repo_config["remote"]
29
+ end
30
+
31
+ def cache_path
32
+ @cache_path ||= File.expand_path(cache_repo_config["local"])
33
+ end
34
+
35
+ def prebuild_sandbox_path
36
+ @dsl_config[:prebuild_sandbox_path] || @deprecated_config["prebuild_path"] || "_Prebuild"
37
+ end
38
+
39
+ def prebuild_delta_path
40
+ @dsl_config[:prebuild_delta_path] || @deprecated_config["prebuild_delta_path"] || "_Prebuild_delta/changes.json"
41
+ end
42
+
19
43
  def manifest_path(in_cache: false)
20
44
  root_dir(in_cache) + "/Manifest.lock"
21
45
  end
22
46
 
23
47
  def root_dir(in_cache)
24
- in_cache ? @cache_path : @prebuild_path
48
+ in_cache ? cache_path : prebuild_sandbox_path
25
49
  end
26
50
 
27
51
  def generated_frameworks_dir(in_cache: false)
28
52
  root_dir(in_cache) + "/GeneratedFrameworks"
29
53
  end
54
+
55
+ def prebuilt_path(path: nil)
56
+ path.nil? ? "_Prebuilt" : "_Prebuilt/#{path}"
57
+ end
58
+
59
+ def validate_dsl_config
60
+ inapplicable_options = @dsl_config.keys - applicable_dsl_config
61
+ return if inapplicable_options.empty?
62
+
63
+ message = <<~HEREDOC
64
+ [WARNING] The following options (in `config_cocoapods_binary_cache`) are not correct: #{inapplicable_options}.
65
+ Available options: #{applicable_dsl_config}.
66
+ Check out the following doc for more details
67
+ https://github.com/grab/cocoapods-binary-cache/blob/master/docs/configure_cocoapods_binary_cache.md
68
+ HEREDOC
69
+
70
+ Pod::UI.puts message.yellow
71
+ end
72
+
73
+ def prebuild_config
74
+ @cli_config[:prebuild_config] || @dsl_config[:prebuild_config] || "Debug"
75
+ end
76
+
77
+ def prebuild_job?
78
+ @cli_config[:prebuild_job] || @dsl_config[:prebuild_job]
79
+ end
80
+
81
+ def prebuild_all_pods?
82
+ @cli_config[:prebuild_all_pods] || @dsl_config[:prebuild_all_pods]
83
+ end
84
+
85
+ def excluded_pods
86
+ @dsl_config[:excluded_pods] || Set.new
87
+ end
88
+
89
+ def dev_pods_enabled?
90
+ @dsl_config[:dev_pods_enabled]
91
+ end
92
+
93
+ def bitcode_enabled?
94
+ @dsl_config[:bitcode_enabled]
95
+ end
96
+
97
+ def device_build_enabled?
98
+ @dsl_config[:device_build_enabled]
99
+ end
100
+
101
+ def disable_dsym?
102
+ @dsl_config[:disable_dsym]
103
+ end
104
+
105
+ def dont_remove_source_code?
106
+ @dsl_config[:dont_remove_source_code]
107
+ end
108
+
109
+ def build_args
110
+ @dsl_config[:build_args]
111
+ end
112
+
113
+ def save_cache_validation_to
114
+ @dsl_config[:save_cache_validation_to]
115
+ end
116
+
117
+ def validate_prebuilt_settings
118
+ @dsl_config[:validate_prebuilt_settings]
119
+ end
120
+
121
+ def prebuild_code_gen
122
+ @dsl_config[:prebuild_code_gen]
123
+ end
124
+
125
+ def targets_to_prebuild_from_cli
126
+ @cli_config[:prebuild_targets] || []
127
+ end
128
+
129
+ private
130
+
131
+ def applicable_dsl_config
132
+ [
133
+ :cache_repo,
134
+ :prebuild_sandbox_path,
135
+ :prebuild_delta_path,
136
+ :prebuild_config,
137
+ :prebuild_job,
138
+ :prebuild_all_pods,
139
+ :excluded_pods,
140
+ :dev_pods_enabled,
141
+ :bitcode_enabled,
142
+ :device_build_enabled,
143
+ :disable_dsym,
144
+ :dont_remove_source_code,
145
+ :build_args,
146
+ :save_cache_validation_to,
147
+ :validate_prebuilt_settings,
148
+ :prebuild_code_gen
149
+ ]
150
+ end
151
+
152
+ def cache_repo_config
153
+ @cache_repo_config ||= begin
154
+ repo = @cli_config[:repo] || "default"
155
+ config_ = @dsl_config[:cache_repo] || {}
156
+ if config_[repo].nil?
157
+ message = <<~HEREDOC
158
+ [Deprecated] Configs in `PodBinaryCacheConfig.json` are deprecated.
159
+ Declare option `cache_repo` in `config_cocoapods_binary_cache` instead.
160
+ Check out the following doc for more details
161
+ https://github.com/grab/cocoapods-binary-cache/blob/master/docs/configure_cocoapods_binary_cache.md
162
+ HEREDOC
163
+ Pod::UI.puts message.yellow
164
+ end
165
+ config_[repo] || {
166
+ "remote" => @deprecated_config["cache_repo"] || @deprecated_config["prebuilt_cache_repo"],
167
+ "local" => @deprecated_config["cache_path"] || "~/.cocoapods-binary-cache/prebuilt-frameworks"
168
+ }
169
+ end
170
+ end
30
171
  end
31
172
  end
@@ -31,9 +31,9 @@ module PodPrebuild
31
31
  end
32
32
 
33
33
  def unzip_cache
34
- Pod::UI.puts "Unzipping cache: #{@config.cache_path} -> #{@config.prebuild_path}".green
35
- FileUtils.rm_rf(@config.prebuild_path)
36
- FileUtils.mkdir_p(@config.prebuild_path)
34
+ Pod::UI.puts "Unzipping cache: #{@config.cache_path} -> #{@config.prebuild_sandbox_path}".green
35
+ FileUtils.rm_rf(@config.prebuild_sandbox_path)
36
+ FileUtils.mkdir_p(@config.prebuild_sandbox_path)
37
37
 
38
38
  if File.exist?(@config.manifest_path(in_cache: true))
39
39
  FileUtils.cp(
@@ -5,7 +5,6 @@ module Pod
5
5
  class Binary < Command
6
6
  class Fetch < Binary
7
7
  self.arguments = [CLAide::Argument.new("CACHE-BRANCH", false)]
8
-
9
8
  def initialize(argv)
10
9
  super
11
10
  @fetcher = PodPrebuild::CacheFetcher.new(
@@ -8,16 +8,23 @@ module Pod
8
8
  self.arguments = [CLAide::Argument.new("CACHE-BRANCH", false)]
9
9
  def self.options
10
10
  [
11
+ ["--config", "Config (Debug, Test...) to prebuild"],
11
12
  ["--push", "Push cache to repo upon completion"],
12
13
  ["--all", "Prebuild all binary pods regardless of cache validation"],
13
14
  ["--targets", "Targets to prebuild. Use comma (,) to specify a list of targets"]
14
- ]
15
+ ].concat(super)
15
16
  end
16
17
 
17
18
  def initialize(argv)
18
19
  super
19
- @prebuild_all_pods = argv.flag?("all")
20
- @prebuild_targets = argv.option("targets", "").split(",")
20
+ prebuild_all_pods = argv.flag?("all")
21
+ prebuild_targets = argv.option("targets", "").split(",")
22
+ update_cli_config(
23
+ :prebuild_job => true,
24
+ :prebuild_all_pods => prebuild_all_pods,
25
+ :prebuild_config => argv.option("config")
26
+ )
27
+ update_cli_config(:prebuild_targets => prebuild_targets) unless prebuild_all_pods
21
28
  @prebuilder = PodPrebuild::CachePrebuilder.new(
22
29
  config: prebuild_config,
23
30
  cache_branch: argv.shift_argument || "master",
@@ -26,9 +33,6 @@ module Pod
26
33
  end
27
34
 
28
35
  def run
29
- Pod::Podfile::DSL.binary_cache_cli_config[:prebuild_job] = true
30
- Pod::Podfile::DSL.binary_cache_cli_config[:prebuild_all_pods] = @prebuild_all_pods
31
- Pod::Podfile::DSL.binary_cache_cli_config[:prebuild_targets] = @prebuild_targets unless @prebuild_all_pods
32
36
  @prebuilder.run
33
37
  end
34
38
  end
@@ -5,7 +5,6 @@ module Pod
5
5
  class Binary < Command
6
6
  class Push < Binary
7
7
  self.arguments = [CLAide::Argument.new("CACHE-BRANCH", false)]
8
-
9
8
  def initialize(argv)
10
9
  super
11
10
  @pusher = PodPrebuild::CachePusher.new(
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.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bang Nguyen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-14 00:00:00.000000000 Z
11
+ date: 2020-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocoapods
@@ -70,14 +70,14 @@ dependencies:
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '1.3'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.3'
83
83
  - !ruby/object:Gem::Dependency