cocoapods-core 0.27.1 → 0.28.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cocoapods-core.rb +0 -2
- data/lib/cocoapods-core/core_ui.rb +0 -1
- data/lib/cocoapods-core/dependency.rb +20 -15
- data/lib/cocoapods-core/gem_version.rb +1 -1
- data/lib/cocoapods-core/github.rb +1 -1
- data/lib/cocoapods-core/lockfile.rb +15 -11
- data/lib/cocoapods-core/platform.rb +10 -6
- data/lib/cocoapods-core/podfile.rb +18 -11
- data/lib/cocoapods-core/podfile/dsl.rb +25 -23
- data/lib/cocoapods-core/podfile/target_definition.rb +60 -36
- data/lib/cocoapods-core/requirement.rb +2 -2
- data/lib/cocoapods-core/source.rb +34 -10
- data/lib/cocoapods-core/source/acceptor.rb +12 -8
- data/lib/cocoapods-core/source/aggregate.rb +22 -9
- data/lib/cocoapods-core/source/health_reporter.rb +2 -2
- data/lib/cocoapods-core/specification.rb +14 -12
- data/lib/cocoapods-core/specification/consumer.rb +8 -6
- data/lib/cocoapods-core/specification/dsl.rb +66 -18
- data/lib/cocoapods-core/specification/dsl/attribute.rb +5 -4
- data/lib/cocoapods-core/specification/dsl/deprecations.rb +35 -23
- data/lib/cocoapods-core/specification/dsl/platform_proxy.rb +16 -11
- data/lib/cocoapods-core/specification/linter.rb +107 -36
- data/lib/cocoapods-core/specification/root_attribute_accessors.rb +16 -4
- data/lib/cocoapods-core/specification/set.rb +41 -24
- data/lib/cocoapods-core/specification/set/presenter.rb +7 -5
- data/lib/cocoapods-core/specification/yaml.rb +6 -2
- data/lib/cocoapods-core/standard_error.rb +3 -3
- data/lib/cocoapods-core/vendor.rb +0 -1
- data/lib/cocoapods-core/vendor/requirement.rb +9 -9
- data/lib/cocoapods-core/vendor/version.rb +143 -140
- data/lib/cocoapods-core/version.rb +5 -6
- data/lib/cocoapods-core/yaml_converter.rb +3 -2
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59ebc8caae99ff0b103a68db5da56f145260a701
|
4
|
+
data.tar.gz: eb4956ae204fe1e15a008927bc56ab09c5c0ca57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59cdc3c942852b9143f88b3218c378071e4266a6f197cfa86ad7ca84bef718cd26fe4418792b0e65a4951481e06304d2054a3d541cf9ca6847f238ec0d6ce829
|
7
|
+
data.tar.gz: 3a090a0ab43fc39016d6a079571b66834b8ca04dd3a4cff462aa31883afee60cba36dc3e79af1b1bd4087bc9ddf651b094fee85e531f0f7d2565f8a04d06f166
|
data/lib/cocoapods-core.rb
CHANGED
@@ -73,14 +73,16 @@ module Pod
|
|
73
73
|
if requirements.last.is_a?(Hash)
|
74
74
|
@external_source = requirements.pop
|
75
75
|
unless requirements.empty?
|
76
|
-
raise Informative, "A dependency with an external source may not
|
76
|
+
raise Informative, "A dependency with an external source may not " \
|
77
|
+
"specify version requirements (#{name})."
|
77
78
|
end
|
78
79
|
|
79
80
|
elsif requirements.last == :head
|
80
81
|
@head = true
|
81
82
|
requirements.pop
|
82
83
|
unless requirements.empty?
|
83
|
-
raise Informative, "A `:head` dependency may not specify version
|
84
|
+
raise Informative, "A `:head` dependency may not specify version " \
|
85
|
+
"requirements (#{name})."
|
84
86
|
end
|
85
87
|
end
|
86
88
|
|
@@ -103,8 +105,11 @@ module Pod
|
|
103
105
|
# be better to add something like Version#display_string.
|
104
106
|
#
|
105
107
|
def requirement
|
106
|
-
|
107
|
-
|
108
|
+
if specific_version
|
109
|
+
Requirement.new(Version.new(specific_version.version))
|
110
|
+
else
|
111
|
+
@requirement
|
112
|
+
end
|
108
113
|
end
|
109
114
|
|
110
115
|
# @return [Bool] whether the dependency points to a subspec.
|
@@ -175,7 +180,7 @@ module Pod
|
|
175
180
|
return false unless external_source == other.external_source
|
176
181
|
|
177
182
|
other.requirement.requirements.all? do | operator, version |
|
178
|
-
|
183
|
+
requirement.satisfied_by? Version.new(version)
|
179
184
|
end
|
180
185
|
end
|
181
186
|
|
@@ -184,13 +189,13 @@ module Pod
|
|
184
189
|
# external source.
|
185
190
|
#
|
186
191
|
def ==(other)
|
187
|
-
|
192
|
+
self.class == other.class &&
|
188
193
|
name == other.name &&
|
189
194
|
requirement == other.requirement &&
|
190
195
|
head? == other.head? &&
|
191
196
|
external_source == other.external_source
|
192
197
|
end
|
193
|
-
|
198
|
+
alias_method :eql?, :==
|
194
199
|
|
195
200
|
# @return [Fixnum] The hash value based on the name and on the
|
196
201
|
# requirements.
|
@@ -202,8 +207,8 @@ module Pod
|
|
202
207
|
# @return [Fixnum] How the dependency should be sorted respect to another
|
203
208
|
# one according to its name.
|
204
209
|
#
|
205
|
-
def <=>
|
206
|
-
|
210
|
+
def <=>(other)
|
211
|
+
name <=> other.name
|
207
212
|
end
|
208
213
|
|
209
214
|
# Merges the version requirements of the dependency with another one.
|
@@ -218,11 +223,11 @@ module Pod
|
|
218
223
|
# includes also the version requirements of the given one.
|
219
224
|
#
|
220
225
|
def merge(other)
|
221
|
-
unless name == other.name
|
226
|
+
unless name == other.name
|
222
227
|
raise ArgumentError, "#{self} and #{other} have different names"
|
223
228
|
end
|
224
229
|
default = Requirement.default
|
225
|
-
self_req =
|
230
|
+
self_req = requirement
|
226
231
|
other_req = other.requirement
|
227
232
|
|
228
233
|
if other_req == default
|
@@ -254,7 +259,7 @@ module Pod
|
|
254
259
|
# @return [Bool] Whether the dependency is satisfied.
|
255
260
|
#
|
256
261
|
def match?(name, version)
|
257
|
-
return false unless self.name
|
262
|
+
return false unless self.name == name
|
258
263
|
return true if requirement.none?
|
259
264
|
requirement.satisfied_by?(Version.new(version))
|
260
265
|
end
|
@@ -313,7 +318,7 @@ module Pod
|
|
313
318
|
match_data = string.match(/(\S*)( (.*))?/)
|
314
319
|
name = match_data[1]
|
315
320
|
version = match_data[2]
|
316
|
-
version = version.gsub(/[()]/,'') if version
|
321
|
+
version = version.gsub(/[()]/, '') if version
|
317
322
|
case version
|
318
323
|
when nil || /from `(.*)(`|')/
|
319
324
|
Dependency.new(name)
|
@@ -328,8 +333,8 @@ module Pod
|
|
328
333
|
# @return [String] a string representation suitable for debugging.
|
329
334
|
#
|
330
335
|
def inspect
|
331
|
-
"<#{self.class} name=#{
|
332
|
-
|
336
|
+
"<#{self.class} name=#{name} requirements=#{requirement.to_s} " \
|
337
|
+
"external_source=#{external_source || 'nil'}>"
|
333
338
|
end
|
334
339
|
|
335
340
|
#--------------------------------------#
|
@@ -80,7 +80,7 @@ module Pod
|
|
80
80
|
# @return [Nil] if the given url is not a valid github repo url.
|
81
81
|
#
|
82
82
|
def self.repo_id_from_url(url)
|
83
|
-
url[
|
83
|
+
url[%r[github.com/([^/\.]*/[^/\.]*)\.*], 1]
|
84
84
|
end
|
85
85
|
|
86
86
|
# Performs a get request with the given URL.
|
@@ -12,7 +12,7 @@ module Pod
|
|
12
12
|
#
|
13
13
|
class Lockfile
|
14
14
|
|
15
|
-
#
|
15
|
+
# @todo The symbols should be converted to a String and back to symbol
|
16
16
|
# when reading (EXTERNAL SOURCES Download options)
|
17
17
|
|
18
18
|
# @return [String] the hash used to initialize the Lockfile.
|
@@ -56,7 +56,7 @@ module Pod
|
|
56
56
|
# @return [Bool] Whether the Podfiles are equal.
|
57
57
|
#
|
58
58
|
def ==(other)
|
59
|
-
other &&
|
59
|
+
other && to_hash == other.to_hash
|
60
60
|
end
|
61
61
|
|
62
62
|
# @return [String] a string representation suitable for debugging.
|
@@ -89,7 +89,9 @@ module Pod
|
|
89
89
|
def version(pod_name)
|
90
90
|
version = pod_versions[pod_name]
|
91
91
|
return version if version
|
92
|
-
root_name = pod_versions.keys.find
|
92
|
+
root_name = pod_versions.keys.find do |name|
|
93
|
+
Specification.root_name(name) == pod_name
|
94
|
+
end
|
93
95
|
pod_versions[root_name]
|
94
96
|
end
|
95
97
|
|
@@ -140,7 +142,8 @@ module Pod
|
|
140
142
|
version = version(name)
|
141
143
|
|
142
144
|
unless dep && version
|
143
|
-
raise StandardError, "Attempt to lock the `#{name}` Pod without an
|
145
|
+
raise StandardError, "Attempt to lock the `#{name}` Pod without an " \
|
146
|
+
"known dependency."
|
144
147
|
end
|
145
148
|
|
146
149
|
locked_dependency = dep.dup
|
@@ -229,9 +232,11 @@ module Pod
|
|
229
232
|
#
|
230
233
|
def detect_changes_with_podfile(podfile)
|
231
234
|
result = {}
|
232
|
-
[
|
235
|
+
[:added, :changed, :removed, :unchanged].each { |k| result[k] = [] }
|
233
236
|
|
234
|
-
installed_deps = dependencies.map
|
237
|
+
installed_deps = dependencies.map do |dep|
|
238
|
+
dependency_to_lock_pod_named(dep.name)
|
239
|
+
end
|
235
240
|
all_dep_names = (dependencies + podfile.dependencies).map(&:name).uniq
|
236
241
|
all_dep_names.each do |name|
|
237
242
|
installed_dep = installed_deps.find { |d| d.name == name }
|
@@ -239,7 +244,7 @@ module Pod
|
|
239
244
|
|
240
245
|
if installed_dep.nil? then key = :added
|
241
246
|
elsif podfile_dep.nil? then key = :removed
|
242
|
-
elsif podfile_dep.compatible?(installed_dep
|
247
|
+
elsif podfile_dep.compatible?(installed_dep) then key = :unchanged
|
243
248
|
else key = :changed
|
244
249
|
end
|
245
250
|
result[key] << name
|
@@ -262,7 +267,7 @@ module Pod
|
|
262
267
|
#
|
263
268
|
def write_to_disk(path)
|
264
269
|
path.dirname.mkpath unless path.dirname.exist?
|
265
|
-
File.open(path, 'w') {|f| f.write(to_yaml) }
|
270
|
+
File.open(path, 'w') { |f| f.write(to_yaml) }
|
266
271
|
self.defined_in_file = path
|
267
272
|
end
|
268
273
|
|
@@ -391,7 +396,7 @@ module Pod
|
|
391
396
|
# @return [Array] the generated data.
|
392
397
|
#
|
393
398
|
def generate_dependencies_data(podfile)
|
394
|
-
podfile.dependencies.map{ |d| d.to_s }.sort
|
399
|
+
podfile.dependencies.map { |d| d.to_s }.sort
|
395
400
|
end
|
396
401
|
|
397
402
|
# Generates the information of the external sources.
|
@@ -409,7 +414,7 @@ module Pod
|
|
409
414
|
#
|
410
415
|
def generate_external_sources_data(podfile)
|
411
416
|
deps = podfile.dependencies.select(&:external?)
|
412
|
-
deps = deps.sort { |d, other| d.name <=> other.name}
|
417
|
+
deps = deps.sort { |d, other| d.name <=> other.name }
|
413
418
|
sources = {}
|
414
419
|
deps.each { |d| sources[d.root_name] = d.external_source }
|
415
420
|
sources
|
@@ -437,4 +442,3 @@ module Pod
|
|
437
442
|
end
|
438
443
|
end
|
439
444
|
end
|
440
|
-
|
@@ -100,7 +100,7 @@ module Pod
|
|
100
100
|
def supports?(other)
|
101
101
|
other = Platform.new(other)
|
102
102
|
if other.deployment_target && deployment_target
|
103
|
-
|
103
|
+
(other.name == name) && (other.deployment_target <= deployment_target)
|
104
104
|
else
|
105
105
|
other.name == name
|
106
106
|
end
|
@@ -119,7 +119,7 @@ module Pod
|
|
119
119
|
#
|
120
120
|
def inspect
|
121
121
|
"#<#{self.class.name} name=#{name.inspect} " \
|
122
|
-
|
122
|
+
"deployment_target=#{deployment_target.inspect}>"
|
123
123
|
end
|
124
124
|
|
125
125
|
# @return [Symbol] a symbol representing the name of the platform.
|
@@ -137,10 +137,10 @@ module Pod
|
|
137
137
|
# @return [Fixnum] -1, 0, or +1 depending on whether the receiver is less
|
138
138
|
# than, equal to, or greater than other.
|
139
139
|
#
|
140
|
-
def <=>
|
141
|
-
name_sort =
|
140
|
+
def <=>(other)
|
141
|
+
name_sort = name.to_s <=> other.name.to_s
|
142
142
|
if name_sort.zero?
|
143
|
-
|
143
|
+
deployment_target <=> other.deployment_target
|
144
144
|
else
|
145
145
|
name_sort
|
146
146
|
end
|
@@ -150,7 +150,11 @@ module Pod
|
|
150
150
|
# iOS.
|
151
151
|
#
|
152
152
|
def requires_legacy_ios_archs?
|
153
|
-
|
153
|
+
if name == :ios
|
154
|
+
deployment_target && (deployment_target < Version.new("4.3"))
|
155
|
+
else
|
156
|
+
false
|
157
|
+
end
|
154
158
|
end
|
155
159
|
|
156
160
|
# Converts the symbolic name of a platform to a string name suitable to be
|
@@ -172,11 +172,11 @@ module Pod
|
|
172
172
|
|
173
173
|
# @return [Array] The keys used by the hash representation of the Podfile.
|
174
174
|
#
|
175
|
-
HASH_KEYS = [
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
175
|
+
HASH_KEYS = %w[
|
176
|
+
target_definitions
|
177
|
+
workspace
|
178
|
+
generate_bridge_support
|
179
|
+
set_arc_compatibility_flag
|
180
180
|
].freeze
|
181
181
|
|
182
182
|
# @return [Hash] The hash representation of the Podfile.
|
@@ -234,16 +234,19 @@ module Pod
|
|
234
234
|
# @return [Podfile] the new Podfile
|
235
235
|
#
|
236
236
|
def self.from_ruby(path)
|
237
|
-
string = File.open(path, 'r:utf-8')
|
237
|
+
string = File.open(path, 'r:utf-8') { |f| f.read }
|
238
238
|
# Work around for Rubinius incomplete encoding in 1.9 mode
|
239
239
|
if string.respond_to?(:encoding) && string.encoding.name != "UTF-8"
|
240
240
|
string.encode!('UTF-8')
|
241
241
|
end
|
242
242
|
podfile = Podfile.new(path) do
|
243
243
|
begin
|
244
|
+
# rubocop:disable Eval
|
244
245
|
eval(string, nil, path.to_s)
|
246
|
+
# rubocop:enable Eval
|
245
247
|
rescue Exception => e
|
246
|
-
|
248
|
+
message = "Invalid `#{path.basename}` file: #{e.message}"
|
249
|
+
raise DSLError.new(message, path, e.backtrace)
|
247
250
|
end
|
248
251
|
end
|
249
252
|
podfile
|
@@ -261,7 +264,7 @@ module Pod
|
|
261
264
|
# @return [Podfile] the new Podfile
|
262
265
|
#
|
263
266
|
def self.from_yaml(path)
|
264
|
-
string = File.open(path, 'r:utf-8')
|
267
|
+
string = File.open(path, 'r:utf-8') { |f| f.read }
|
265
268
|
# Work around for Rubinius incomplete encoding in 1.9 mode
|
266
269
|
if string.respond_to?(:encoding) && string.encoding.name != "UTF-8"
|
267
270
|
string.encode!('UTF-8')
|
@@ -283,7 +286,7 @@ module Pod
|
|
283
286
|
def self.from_hash(hash, path = nil)
|
284
287
|
internal_hash = hash.dup
|
285
288
|
target_definitions = internal_hash.delete('target_definitions') || []
|
286
|
-
podfile = Podfile.new(path,internal_hash)
|
289
|
+
podfile = Podfile.new(path, internal_hash)
|
287
290
|
target_definitions.each do |definition_hash|
|
288
291
|
definition = TargetDefinition.from_hash(definition_hash, podfile)
|
289
292
|
podfile.root_target_definitions << definition
|
@@ -314,7 +317,9 @@ module Pod
|
|
314
317
|
# @return [void]
|
315
318
|
#
|
316
319
|
def set_hash_value(key, value)
|
317
|
-
|
320
|
+
unless HASH_KEYS.include?(key)
|
321
|
+
raise StandardError, "Unsupported hash key `#{key}`"
|
322
|
+
end
|
318
323
|
internal_hash[key] = value
|
319
324
|
end
|
320
325
|
|
@@ -328,7 +333,9 @@ module Pod
|
|
328
333
|
# @return [Object] The value for the key.
|
329
334
|
#
|
330
335
|
def get_hash_value(key)
|
331
|
-
|
336
|
+
unless HASH_KEYS.include?(key)
|
337
|
+
raise StandardError, "Unsupported hash key `#{key}`"
|
338
|
+
end
|
332
339
|
internal_hash[key]
|
333
340
|
end
|
334
341
|
|
@@ -36,13 +36,13 @@ module Pod
|
|
36
36
|
module DSL
|
37
37
|
|
38
38
|
# @!group Dependencies
|
39
|
-
# The Podfile specifies the dependencies of each user target.
|
39
|
+
# The Podfile specifies the dependencies of each user target.
|
40
40
|
#
|
41
41
|
# * `pod` is the way to declare a specific dependency.
|
42
42
|
# * `podspec` provides an easy creation API for local podspecs.
|
43
|
-
# * `target` allows you to scope your dependencies to specific
|
43
|
+
# * `target` allows you to scope your dependencies to specific
|
44
44
|
# targets in your Xcode projects.
|
45
|
-
|
45
|
+
|
46
46
|
#-----------------------------------------------------------------------#
|
47
47
|
|
48
48
|
# Specifies a dependency of the project.
|
@@ -149,7 +149,8 @@ module Pod
|
|
149
149
|
#
|
150
150
|
def pod(name = nil, *requirements, &block)
|
151
151
|
if block
|
152
|
-
raise StandardError, "Inline specifications are deprecated.
|
152
|
+
raise StandardError, "Inline specifications are deprecated. " \
|
153
|
+
"Please store the specification in a `podspec` file."
|
153
154
|
end
|
154
155
|
|
155
156
|
unless name
|
@@ -173,8 +174,8 @@ module Pod
|
|
173
174
|
# podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'
|
174
175
|
#
|
175
176
|
# @param [Hash {Symbol=>String}] options
|
176
|
-
# the path where to load the {Specification}. If not provided
|
177
|
-
# first podspec in the directory of the podfile is used.
|
177
|
+
# the path where to load the {Specification}. If not provided
|
178
|
+
# the first podspec in the directory of the podfile is used.
|
178
179
|
#
|
179
180
|
# @option options [String] :path
|
180
181
|
# the path of the podspec file
|
@@ -195,9 +196,10 @@ module Pod
|
|
195
196
|
current_target_definition.store_podspec(options)
|
196
197
|
end
|
197
198
|
|
198
|
-
# Defines a new static library target and scopes dependencies defined
|
199
|
-
# the given block. The target will by default include the
|
200
|
-
# defined outside of the block, unless the `:exclusive =>
|
199
|
+
# Defines a new static library target and scopes dependencies defined
|
200
|
+
# from the given block. The target will by default include the
|
201
|
+
# dependencies defined outside of the block, unless the `:exclusive =>
|
202
|
+
# true` option is
|
201
203
|
# given.
|
202
204
|
#
|
203
205
|
# ---
|
@@ -232,7 +234,8 @@ module Pod
|
|
232
234
|
#
|
233
235
|
def target(name, options = {})
|
234
236
|
if options && !options.keys.all? { |key| [:exclusive].include?(key) }
|
235
|
-
raise Informative, "Unsupported options `#{options}` for
|
237
|
+
raise Informative, "Unsupported options `#{options}` for " \
|
238
|
+
"target `#{name}`"
|
236
239
|
end
|
237
240
|
|
238
241
|
parent = current_target_definition
|
@@ -250,9 +253,9 @@ module Pod
|
|
250
253
|
# These settings are used to control the CocoaPods generated project.
|
251
254
|
#
|
252
255
|
# This starts out simply with stating what `platform` you are working
|
253
|
-
# on. `xcodeproj` allows you to state specifically which project to
|
254
|
-
# link with.
|
255
|
-
|
256
|
+
# on. `xcodeproj` allows you to state specifically which project to
|
257
|
+
# link with.
|
258
|
+
|
256
259
|
#-----------------------------------------------------------------------#
|
257
260
|
|
258
261
|
# Specifies the platform for which a static library should be build.
|
@@ -284,8 +287,8 @@ module Pod
|
|
284
287
|
current_target_definition.set_platform(name, target)
|
285
288
|
end
|
286
289
|
|
287
|
-
# Specifies the Xcode project that contains the target that the Pods
|
288
|
-
# should be linked with.
|
290
|
+
# Specifies the Xcode project that contains the target that the Pods
|
291
|
+
# library should be linked with.
|
289
292
|
#
|
290
293
|
# -----
|
291
294
|
#
|
@@ -304,12 +307,12 @@ module Pod
|
|
304
307
|
# the path of the project to link with
|
305
308
|
#
|
306
309
|
# @param [Hash{String => symbol}] build_configurations
|
307
|
-
# a hash where the keys are the name of the build
|
308
|
-
# in your Xcode project and the values are
|
309
|
-
# if the configuration should be based on
|
310
|
-
# `:release` configuration. If no explicit
|
311
|
-
# for a configuration in your project, it
|
312
|
-
# `:release`.
|
310
|
+
# a hash where the keys are the name of the build
|
311
|
+
# configurations in your Xcode project and the values are
|
312
|
+
# Symbols that specify if the configuration should be based on
|
313
|
+
# the `:debug` or `:release` configuration. If no explicit
|
314
|
+
# mapping is specified for a configuration in your project, it
|
315
|
+
# will default to `:release`.
|
313
316
|
#
|
314
317
|
# @example Specifying the user project
|
315
318
|
#
|
@@ -366,7 +369,7 @@ module Pod
|
|
366
369
|
#
|
367
370
|
# This attribute is inherited by child target definitions.
|
368
371
|
#
|
369
|
-
# If you would like to inhibit warnings per Pod you can use the
|
372
|
+
# If you would like to inhibit warnings per Pod you can use the
|
370
373
|
# following syntax:
|
371
374
|
#
|
372
375
|
# pod 'SSZipArchive', :inhibit_warnings => true
|
@@ -493,4 +496,3 @@ module Pod
|
|
493
496
|
end
|
494
497
|
end
|
495
498
|
end
|
496
|
-
|