cocoapods-core 0.27.1 → 0.28.0
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 +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
|
-
|