lib/cocoapods-jxedt/binary/hooks/pre_install.rb in cocoapods-jxedt-0.0.12 vs lib/cocoapods-jxedt/binary/hooks/pre_install.rb in cocoapods-jxedt-0.0.13
- old
+ new
@@ -14,43 +14,63 @@
def run
# check binary switch
return unless Jxedt.config.binary_switch?
- # [Check Environment]
- podfile = @installer_context.podfile
- podfile.target_definition_list.each do |target_definition|
- raise STDERR.puts "[!] Cocoapods-binary requires `use_frameworks!`".red if not target_definition.uses_frameworks?
+ unless Gem::Version.new(Pod::VERSION) >= Gem::Version.new('1.10.0')
+ raise STDERR.puts "[!] cocoapods-jxedt binary plugin should use cocoapods version greater than '1.10.0'`".red
end
require_relative '../helper/prebuild_sandbox'
# 如果是Pod::PrebuildSandbox类则直接返回
return if @installer_context.sandbox.is_a?(Pod::PrebuildSandbox)
# 获取原始的installer对象,必须先获取对象
original_installer = ObjectSpace.each_object(Pod::Installer).first
- sandbox = Pod::PrebuildSandbox.from_standard_sandbox(@installer_context.sandbox)
- source_installer = Pod::Installer.new(sandbox, @installer_context.podfile, @installer_context.lockfile)
+ prebuild_sandbox = Pod::PrebuildSandbox.from_standard_sandbox(@installer_context.sandbox)
+ source_installer = Pod::Installer.new(prebuild_sandbox, @installer_context.podfile, @installer_context.lockfile)
# 设置原始的installer携带的参数
source_installer.update = original_installer.update
source_installer.repo_update = original_installer.repo_update
# 执行install
source_installer.install!
# 保存首次`pod install`的lockfile结果,用来验证二进制文件和后面做结果校验
- @installer_context.sandbox.source_lockfile = sandbox.source_lockfile = source_installer.lockfile
+ @installer_context.sandbox.source_lockfile = prebuild_sandbox.source_lockfile = source_installer.lockfile
require_relative '../helper/podfile_options'
require_relative '../prebuild'
+ # fetch cache and sync
+ if Jxedt.config.cache_repo_enabled? && Jxedt.config.auto_fetch?
+ log_section "🚗 Fetch git cache"
+ pods = prebuild_sandbox.source_lockfile.internal_data["SPEC CHECKSUMS"].keys
+ binary_hash = pods.reduce({}) do |hash, name|
+ checksum = prebuild_sandbox.source_lockfile.spec_checksums_hash_key(name)
+ hash.update(name => checksum) unless checksum.nil?
+ end
+
+ require 'cocoapods-jxedt/git_helper/cache_fetcher'
+ binary_dir = @installer_context.sandbox.root + Jxedt.config.binary_dir
+ Jxedt::CacheFetcher.sync(binary_hash, binary_dir)
+ end
+
# prebuild_job
- sandbox.link_source_project!
+ prebuild_sandbox.link_source_project!
if Jxedt.config.prebuild_job?
log_section "🚀 Prebuild frameworks"
- Jxedt::Prebuild.new(source_installer).build
+ build_targets = Jxedt::Prebuild.new(source_installer).build
+
+ # cache push
+ if Jxedt.config.cache_repo_enabled? && Jxedt.config.auto_push? && build_targets && build_targets.size > 0
+ log_section "🚄 Push git cache"
+ require 'cocoapods-jxedt/git_helper/cache_pucher'
+ output_dir = prebuild_sandbox.root + Jxedt.config.binary_dir
+ Jxedt::CachePucher.push(output_dir, build_targets, false)
+ end
end
- sandbox.clean_source_project!
+ prebuild_sandbox.clean_source_project!
log_section "🤖 Resume pod installation"
require_relative '../targets/pod_target'
require_relative '../Intergation'
end
\ No newline at end of file