Class: LgPodPlugin::LCache
- Inherits:
-
Object
- Object
- LgPodPlugin::LCache
- Defined in:
- lib/lg_pod_plugin/downloader/l_cache.rb
Class Method Summary collapse
- .cache_pod(name, target, options = {}, spec = nil, released_pod = false) ⇒ Object
- .clean_pod_unused_files(destination, spec) ⇒ Object
- .copy_and_clean(source, destination, spec) ⇒ Object
- .download_request(name, params, spec = nil, released_pod = false) ⇒ Object
-
.get_local_spec(request, target) ⇒ Object
def self.cached_spec(request) path = path_for_spec(request) path.file? && Specification.from_file(path) rescue JSON::ParserError nil end.
- .group_subspecs_by_platform(spec) ⇒ Object
-
.path_for_pod(request, slug_opts = {}) ⇒ Object
MARK - 缓存方法.
- .path_for_spec(request, slug_opts = {}) ⇒ Object
- .root_path ⇒ Object
- .write_lock(location, &block) ⇒ Object
- .write_spec(spec, path) ⇒ Object
Instance Method Summary collapse
- #find_pod_cache(name, options, spec = nil, released_pod = false) ⇒ Object
-
#initialize ⇒ LCache
constructor
A new instance of LCache.
- #pod_cache_exist(name, options, spec = nil, released_pod = false) ⇒ Object
Constructor Details
#initialize ⇒ LCache
Returns a new instance of LCache.
11 12 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 11 def initialize end |
Class Method Details
.cache_pod(name, target, options = {}, spec = nil, released_pod = false) ⇒ Object
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 145 def self.cache_pod(name, target, = {}, spec = nil, released_pod = false) = Hash.new.deep_merge().reject do |key, val| !key || !val end request = LCache.download_request(name, , spec, released_pod) _, pods_pecs = get_local_spec(request, target) pods_pecs.each do |_, s_spec| destination = path_for_pod(request, :name => name, :params => ) if !File.exist?(destination) || destination.children.empty? LgPodPlugin.log_green "Copying #{name} from `#{target}` to `#{destination}` " copy_and_clean(target, destination, s_spec) end cache_pod_spec = path_for_spec(request, :name => name, :params => ) unless File.exist?(cache_pod_spec) write_spec(s_spec, cache_pod_spec) end end end |
.clean_pod_unused_files(destination, spec) ⇒ Object
120 121 122 123 124 125 126 127 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 120 def self.clean_pod_unused_files(destination, spec) specs_by_platform = group_subspecs_by_platform(spec) destination.parent.mkpath self.write_lock(destination) do Pod::Installer::PodSourcePreparer.new(spec, destination).prepare! Pod::Sandbox::PodDirCleaner.new(destination, specs_by_platform).clean! end end |
.copy_and_clean(source, destination, spec) ⇒ Object
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 109 def self.copy_and_clean(source, destination, spec) specs_by_platform = group_subspecs_by_platform(spec) destination.parent.mkpath self.write_lock(destination) do FileUtils.rm_rf(destination) FileUtils.cp_r(source, destination) Pod::Installer::PodSourcePreparer.new(spec, destination).prepare! Pod::Sandbox::PodDirCleaner.new(destination, specs_by_platform).clean! end end |
.download_request(name, params, spec = nil, released_pod = false) ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 51 def self.download_request(name, params, spec = nil, released_pod = false) if released_pod Pod::Downloader::Request.new(spec: spec, released: true , name: name, params: params) else Pod::Downloader::Request.new(spec: nil, released: false , name: name, params: params) end end |
.get_local_spec(request, target) ⇒ Object
def self.cached_spec(request)
path = path_for_spec(request)
path.file? && Specification.from_file(path)
rescue JSON::ParserError
nil
end
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 77 def self.get_local_spec(request, target) result = Pod::Downloader::Response.new result.location = target if request.released_pod? result.spec = request.spec local_specs = { request.name => request.spec } return [request, local_specs] else local_specs = {} pods_pecs = Pod::Sandbox::PodspecFinder.new(target).podspecs pods_pecs[request.name] = request.spec if request.spec pods_pecs.each do |name, spec| if request.name == name result.spec = spec local_specs[request.name] = spec end end end [result, local_specs] end |
.group_subspecs_by_platform(spec) ⇒ Object
98 99 100 101 102 103 104 105 106 107 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 98 def self.group_subspecs_by_platform(spec) specs_by_platform = {} [spec, *spec.recursive_subspecs].each do |ss| ss.available_platforms.each do |platform| specs_by_platform[platform] ||= [] specs_by_platform[platform] << ss end end specs_by_platform end |
.path_for_pod(request, slug_opts = {}) ⇒ Object
MARK - 缓存方法
59 60 61 62 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 59 def self.path_for_pod(request, slug_opts = {}) root = self.root_path root + request.slug(**slug_opts) end |
.path_for_spec(request, slug_opts = {}) ⇒ Object
64 65 66 67 68 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 64 def self.path_for_spec(request, slug_opts = {}) root = self.root_path path = root + 'Specs' + request.slug(**slug_opts) Pathname.new(path.to_path + '.podspec.json') end |
.root_path ⇒ Object
46 47 48 49 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 46 def self.root_path path = File.join(Dir.home, "Library/Caches/CocoaPods/Pods") Pathname(path) end |
.write_lock(location, &block) ⇒ Object
129 130 131 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 129 def self.write_lock(location, &block) Pod::Downloader::Cache.lock(location, File::LOCK_SH, &block) end |
.write_spec(spec, path) ⇒ Object
134 135 136 137 138 139 140 141 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 134 def self.write_spec(spec, path) path.dirname.mkpath Pod::Downloader::Cache.write_lock(path) do path.open('w') { |f| f.write spec.to_pretty_json } end end |
Instance Method Details
#find_pod_cache(name, options, spec = nil, released_pod = false) ⇒ Object
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 35 def find_pod_cache(name, , spec = nil, released_pod = false) hash_map = Hash.new.merge!() if hash_map.has_key?(:version) hash_map.delete(:version) end request = LCache.download_request(name, hash_map, spec, released_pod) destination = LCache.path_for_pod(request) cache_pod_spec = LCache.path_for_spec(request) [destination, cache_pod_spec] end |
#pod_cache_exist(name, options, spec = nil, released_pod = false) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/lg_pod_plugin/downloader/l_cache.rb', line 15 def pod_cache_exist(name, , spec = nil, released_pod = false) # 参数为空不执行下载任务, 交给 cocoapods 处理下载 if .nil? return [true, nil, nil] end destination, cache_pod_spec = self.find_pod_cache name, , spec, released_pod lock_temp_file = destination.to_path+ ".lock" if File.exist?(lock_temp_file) FileUtils.rm_rf lock_temp_file end if (File.exist?(destination) && !destination.children.empty?) && cache_pod_spec.exist? return [true, destination, cache_pod_spec] else return [false, destination, cache_pod_spec] end end |