cocoapods-core 0.34.1 → 0.34.2
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/gem_version.rb +1 -1
- data/lib/cocoapods-core/podfile/dsl.rb +10 -0
- data/lib/cocoapods-core/source.rb +78 -59
- data/lib/cocoapods-core/source/aggregate.rb +2 -3
- data/lib/cocoapods-core/source/health_reporter.rb +1 -1
- data/lib/cocoapods-core/specification.rb +1 -1
- data/lib/cocoapods-core/specification/set.rb +15 -15
- data/lib/cocoapods-core/specification/set/statistics.rb +1 -1
- metadata +2 -4
- data/lib/cocoapods-core/source/abstract_data_provider.rb +0 -74
- data/lib/cocoapods-core/source/file_system_data_provider.rb +0 -162
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a94f1af3077b3e043f869fbdbb2e09c242aefeb5
|
4
|
+
data.tar.gz: a73fb826f1d22b75ead258ac0e148bd6cf82a510
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf461d926d3deddaf2aab6a6e6fcd68c9c3c85a4b1eb1730fcc1d9399f5b390d53f3a57f8544c54962a6ad31916f0858995adc9b0495958046b8ce180ae1c3b2
|
7
|
+
data.tar.gz: 5d409665efa687120435c9186ae0a58dbf14725ca5afca4a46b9169fe6b2e8c54e1e983037e6053634ab631c2460482585d0a3f2e62adb36a7c352b6ff13329d
|
@@ -145,6 +145,16 @@ module Pod
|
|
145
145
|
# pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
|
146
146
|
#
|
147
147
|
#
|
148
|
+
# To use a different branch of the repo:
|
149
|
+
#
|
150
|
+
# pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
|
151
|
+
#
|
152
|
+
#
|
153
|
+
# To use a tag of the repo:
|
154
|
+
#
|
155
|
+
# pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
|
156
|
+
#
|
157
|
+
#
|
148
158
|
# Or specify a commit:
|
149
159
|
#
|
150
160
|
# pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
|
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'cocoapods-core/source/acceptor'
|
2
2
|
require 'cocoapods-core/source/aggregate'
|
3
3
|
require 'cocoapods-core/source/health_reporter'
|
4
|
-
require 'cocoapods-core/source/abstract_data_provider'
|
5
|
-
require 'cocoapods-core/source/file_system_data_provider'
|
6
4
|
|
7
5
|
module Pod
|
8
6
|
# The Source class is responsible to manage a collection of podspecs.
|
@@ -16,37 +14,40 @@ module Pod
|
|
16
14
|
# "#{SPEC_NAME}/#{VERSION}/#{SPEC_NAME}.podspec"
|
17
15
|
#
|
18
16
|
class Source
|
19
|
-
# @return [
|
17
|
+
# @return [Pathname] The path where the source is stored.
|
20
18
|
#
|
21
|
-
|
19
|
+
attr_reader :repo
|
22
20
|
|
23
21
|
# @param [Pathname, String] repo @see #repo.
|
24
22
|
#
|
25
|
-
def initialize(repo
|
26
|
-
|
27
|
-
if repo.is_a?(String) || repo.is_a?(Pathname)
|
28
|
-
@data_provider = FileSystemDataProvider.new(repo)
|
29
|
-
else
|
30
|
-
@data_provider = repo
|
31
|
-
end
|
23
|
+
def initialize(repo)
|
24
|
+
@repo = Pathname.new(repo)
|
32
25
|
end
|
33
26
|
|
34
27
|
# @return [String] The name of the source.
|
35
28
|
#
|
36
29
|
def name
|
37
|
-
|
30
|
+
repo.basename.to_s
|
38
31
|
end
|
39
32
|
|
40
33
|
# @return [String] The URL of the source.
|
41
34
|
#
|
42
35
|
def url
|
43
|
-
|
36
|
+
Dir.chdir(repo) do
|
37
|
+
remote = `git ls-remote --get-url`.chomp
|
38
|
+
|
39
|
+
if $?.success?
|
40
|
+
remote
|
41
|
+
elsif (repo + '.git').exist?
|
42
|
+
"file://#{repo}/.git"
|
43
|
+
end
|
44
|
+
end
|
44
45
|
end
|
45
46
|
|
46
47
|
# @return [String] The type of the source.
|
47
48
|
#
|
48
49
|
def type
|
49
|
-
|
50
|
+
'file system'
|
50
51
|
end
|
51
52
|
|
52
53
|
alias_method :to_s, :name
|
@@ -77,12 +78,14 @@ module Pod
|
|
77
78
|
#
|
78
79
|
#
|
79
80
|
def pods
|
80
|
-
|
81
|
-
|
82
|
-
raise Informative, "Unable to find the #{data_provider.type} source " \
|
83
|
-
"named: `#{data_provider.name}`"
|
81
|
+
unless specs_dir
|
82
|
+
raise Informative, "Unable to find a source named: `#{name}`"
|
84
83
|
end
|
85
|
-
|
84
|
+
specs_dir_as_string = specs_dir.to_s
|
85
|
+
Dir.entries(specs_dir).select do |entry|
|
86
|
+
valid_name = entry[0, 1] != '.'
|
87
|
+
valid_name && File.directory?(File.join(specs_dir_as_string, entry))
|
88
|
+
end.sort
|
86
89
|
end
|
87
90
|
|
88
91
|
# @return [Array<Version>] all the available versions for the Pod, sorted
|
@@ -92,8 +95,20 @@ module Pod
|
|
92
95
|
# the name of the Pod.
|
93
96
|
#
|
94
97
|
def versions(name)
|
95
|
-
|
96
|
-
|
98
|
+
return nil unless specs_dir
|
99
|
+
raise ArgumentError, 'No name' unless name
|
100
|
+
pod_dir = specs_dir + name
|
101
|
+
return unless pod_dir.exist?
|
102
|
+
pod_dir.children.map do |v|
|
103
|
+
basename = v.basename.to_s
|
104
|
+
begin
|
105
|
+
Version.new(basename) if v.directory? && basename[0, 1] != '.'
|
106
|
+
rescue ArgumentError => e
|
107
|
+
raise Informative, 'An unexpected version directory ' \
|
108
|
+
"`#{basename}` was encountered for the " \
|
109
|
+
"`#{pod_dir}` Pod in the `#{name}` repository."
|
110
|
+
end
|
111
|
+
end.compact.sort.reverse
|
97
112
|
end
|
98
113
|
|
99
114
|
# @return [Specification] the specification for a given version of Pod.
|
@@ -115,6 +130,8 @@ module Pod
|
|
115
130
|
# @return [Pathname] The path of the specification.
|
116
131
|
#
|
117
132
|
def specification_path(name, version)
|
133
|
+
raise ArgumentError, 'No name' unless name
|
134
|
+
raise ArgumentError, 'No version' unless version
|
118
135
|
path = specs_dir + name + version.to_s
|
119
136
|
specification_path = path + "#{name}.podspec.json"
|
120
137
|
unless specification_path.exist?
|
@@ -124,7 +141,7 @@ module Pod
|
|
124
141
|
raise StandardError, "Unable to find the specification #{name} " \
|
125
142
|
"(#{version}) in the #{name} source."
|
126
143
|
end
|
127
|
-
|
144
|
+
specification_path
|
128
145
|
end
|
129
146
|
|
130
147
|
# @return [Array<Specification>] all the specifications contained by the
|
@@ -159,22 +176,6 @@ module Pod
|
|
159
176
|
pods.map { |pod_name| set(pod_name) }
|
160
177
|
end
|
161
178
|
|
162
|
-
# Returns the path of the specification with the given name and version.
|
163
|
-
#
|
164
|
-
# @param [String] name
|
165
|
-
# the name of the Pod.
|
166
|
-
#
|
167
|
-
# @param [Version,String] version
|
168
|
-
# the version for the specification.
|
169
|
-
#
|
170
|
-
# @return [Pathname] The path of the specification.
|
171
|
-
#
|
172
|
-
# @todo Remove.
|
173
|
-
#
|
174
|
-
def specification_path(name, version)
|
175
|
-
data_provider.specification_path(name, version)
|
176
|
-
end
|
177
|
-
|
178
179
|
public
|
179
180
|
|
180
181
|
# @!group Searching the source
|
@@ -183,16 +184,20 @@ module Pod
|
|
183
184
|
# @return [Set] a set for a given dependency. The set is identified by the
|
184
185
|
# name of the dependency and takes into account subspecs.
|
185
186
|
#
|
187
|
+
# @note This method is optimized for fast lookups by name, i.e. it does
|
188
|
+
# *not* require iterating through {#pod_sets}
|
189
|
+
#
|
186
190
|
# @todo Rename to #load_set
|
187
191
|
#
|
188
192
|
def search(query)
|
193
|
+
unless specs_dir
|
194
|
+
raise Informative, "Unable to find a source named: `#{name}`"
|
195
|
+
end
|
189
196
|
if query.is_a?(Dependency)
|
190
|
-
|
191
|
-
else
|
192
|
-
name = query
|
197
|
+
query = query.root_name
|
193
198
|
end
|
194
|
-
|
195
|
-
set
|
199
|
+
if (specs_dir + query).directory?
|
200
|
+
set(query)
|
196
201
|
end
|
197
202
|
end
|
198
203
|
|
@@ -213,23 +218,19 @@ module Pod
|
|
213
218
|
def search_by_name(query, full_text_search = false)
|
214
219
|
regexp_query = /#{query}/i
|
215
220
|
if full_text_search
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
'contains errors.'
|
228
|
-
end
|
229
|
-
texts.grep(regexp_query).empty?
|
221
|
+
pod_sets.reject do |set|
|
222
|
+
texts = []
|
223
|
+
begin
|
224
|
+
s = set.specification
|
225
|
+
texts << s.name
|
226
|
+
texts += s.authors.keys
|
227
|
+
texts << s.summary
|
228
|
+
texts << s.description
|
229
|
+
rescue
|
230
|
+
CoreUI.warn "Skipping `#{set.name}` because the podspec " \
|
231
|
+
'contains errors.'
|
230
232
|
end
|
231
|
-
|
232
|
-
[]
|
233
|
+
texts.grep(regexp_query).empty?
|
233
234
|
end
|
234
235
|
else
|
235
236
|
names = pods.grep(regexp_query)
|
@@ -302,6 +303,24 @@ module Pod
|
|
302
303
|
nil
|
303
304
|
end
|
304
305
|
|
306
|
+
# @return [Pathname] The directory where the specs are stored.
|
307
|
+
#
|
308
|
+
# @note In previous versions of CocoaPods they used to be stored in
|
309
|
+
# the root of the repo. This lead to issues, especially with
|
310
|
+
# the GitHub interface and now the are stored in a dedicated
|
311
|
+
# folder.
|
312
|
+
#
|
313
|
+
def specs_dir
|
314
|
+
@specs_dir ||= begin
|
315
|
+
specs_sub_dir = repo + 'Specs'
|
316
|
+
if specs_sub_dir.exist?
|
317
|
+
specs_sub_dir
|
318
|
+
elsif repo.exist?
|
319
|
+
repo
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
305
324
|
#-------------------------------------------------------------------------#
|
306
325
|
end
|
307
326
|
end
|
@@ -37,7 +37,6 @@ module Pod
|
|
37
37
|
sources.each do |source|
|
38
38
|
pods_by_source[source] = source.pods
|
39
39
|
end
|
40
|
-
sources = pods_by_source.keys
|
41
40
|
pods = pods_by_source.values.flatten.uniq
|
42
41
|
|
43
42
|
pods.map do |pod|
|
@@ -110,8 +109,8 @@ module Pod
|
|
110
109
|
root_spec_names = pods_by_source.values.flatten.uniq
|
111
110
|
root_spec_names.each do |pod|
|
112
111
|
sources = []
|
113
|
-
|
114
|
-
sources <<
|
112
|
+
@sources.each do |s|
|
113
|
+
sources << s if pods_by_source[s].include?(pod)
|
115
114
|
end
|
116
115
|
result << Specification::Set.new(pod, sources)
|
117
116
|
end
|
@@ -122,7 +122,7 @@ module Pod
|
|
122
122
|
# @return [void]
|
123
123
|
#
|
124
124
|
def check_stray_specs
|
125
|
-
all_paths = Pathname.glob(source.
|
125
|
+
all_paths = Pathname.glob(source.repo + '**/*.podspec{,.json}')
|
126
126
|
stray_specs = all_paths - report.analyzed_paths
|
127
127
|
stray_specs.each do |path|
|
128
128
|
report.add_message(:error, 'Stray spec', path)
|
@@ -120,7 +120,7 @@ module Pod
|
|
120
120
|
# pod.
|
121
121
|
#
|
122
122
|
def self.name_and_version_from_string(string_representation)
|
123
|
-
match_data = string_representation.match(/\A(
|
123
|
+
match_data = string_representation.match(/\A((?:\s?[^\s(])+)(?: \((.+)\))?\Z/)
|
124
124
|
unless match_data
|
125
125
|
raise Informative, 'Invalid string representation for a ' \
|
126
126
|
"specification: `#{string_representation}`. " \
|
@@ -8,7 +8,7 @@ module Pod
|
|
8
8
|
# a Pod. This class stores the information of the dependencies that required
|
9
9
|
# a Pod in the resolution process.
|
10
10
|
#
|
11
|
-
# @note The
|
11
|
+
# @note The order in which the sets are provided is used to select a
|
12
12
|
# specification if multiple are available for a given version.
|
13
13
|
#
|
14
14
|
# @note The set class is not and should be not aware of the backing store
|
@@ -32,8 +32,7 @@ module Pod
|
|
32
32
|
#
|
33
33
|
def initialize(name, sources = [])
|
34
34
|
@name = name
|
35
|
-
sources
|
36
|
-
@sources = sources.sort_by(&:name)
|
35
|
+
@sources = Array(sources)
|
37
36
|
@dependencies_by_requirer_name = {}
|
38
37
|
@dependencies = []
|
39
38
|
end
|
@@ -84,23 +83,20 @@ module Pod
|
|
84
83
|
# {#required_version}.
|
85
84
|
#
|
86
85
|
# @note If multiple sources have a specification for the
|
87
|
-
# {#required_version}
|
88
|
-
# used to disambiguate.
|
86
|
+
# {#required_version}, the order in which they are provided
|
87
|
+
# is used to disambiguate.
|
89
88
|
#
|
90
89
|
def specification
|
91
|
-
path =
|
90
|
+
path = specification_paths_for_version(required_version).first
|
92
91
|
Specification.from_file(path)
|
93
92
|
end
|
94
93
|
|
95
|
-
#
|
94
|
+
# @return [Array<String>] the paths to specifications for the given
|
95
|
+
# version
|
96
96
|
#
|
97
|
-
def
|
98
|
-
sources = []
|
99
|
-
|
100
|
-
sources << source if source_versions.include?(required_version)
|
101
|
-
end
|
102
|
-
source = sources.sort_by(&:name).first
|
103
|
-
source.specification_path(name, required_version)
|
97
|
+
def specification_paths_for_version(_version)
|
98
|
+
sources = @sources.select { |source| versions_by_source[source].include?(required_version) }
|
99
|
+
sources.map { |source| source.specification_path(name, required_version) }
|
104
100
|
end
|
105
101
|
|
106
102
|
# @return [Version] the highest version that satisfies the stored
|
@@ -139,8 +135,12 @@ module Pod
|
|
139
135
|
|
140
136
|
# @return [Pathname] The path of the highest version.
|
141
137
|
#
|
138
|
+
# @note If multiple sources have a specification for the
|
139
|
+
# {#required_version}, the order in which they are provided
|
140
|
+
# is used to disambiguate.
|
141
|
+
#
|
142
142
|
def highest_version_spec_path
|
143
|
-
|
143
|
+
specification_paths_for_version(highest_version).first
|
144
144
|
end
|
145
145
|
|
146
146
|
# @return [Hash{Source => Version}] all the available versions for the
|
@@ -218,7 +218,7 @@ module Pod
|
|
218
218
|
def compute_creation_date(set)
|
219
219
|
date = get_value(set, :creation_date)
|
220
220
|
unless date
|
221
|
-
Dir.chdir(set.sources.first.
|
221
|
+
Dir.chdir(set.sources.first.repo) do
|
222
222
|
git_log = `git log --first-parent --format=%ct "#{set.name}"`
|
223
223
|
creation_date = git_log.split("\n").last.to_i
|
224
224
|
date = Time.at(creation_date)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.34.
|
4
|
+
version: 0.34.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eloy Duran
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-10-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -103,10 +103,8 @@ files:
|
|
103
103
|
- lib/cocoapods-core/podfile/target_definition.rb
|
104
104
|
- lib/cocoapods-core/podfile.rb
|
105
105
|
- lib/cocoapods-core/requirement.rb
|
106
|
-
- lib/cocoapods-core/source/abstract_data_provider.rb
|
107
106
|
- lib/cocoapods-core/source/acceptor.rb
|
108
107
|
- lib/cocoapods-core/source/aggregate.rb
|
109
|
-
- lib/cocoapods-core/source/file_system_data_provider.rb
|
110
108
|
- lib/cocoapods-core/source/health_reporter.rb
|
111
109
|
- lib/cocoapods-core/source.rb
|
112
110
|
- lib/cocoapods-core/specification/consumer.rb
|
@@ -1,74 +0,0 @@
|
|
1
|
-
module Pod
|
2
|
-
class Source
|
3
|
-
# Defines the required and the optional methods of a data provider.
|
4
|
-
#
|
5
|
-
class AbstractDataProvider
|
6
|
-
public
|
7
|
-
|
8
|
-
# @group Required methods
|
9
|
-
#-----------------------------------------------------------------------#
|
10
|
-
|
11
|
-
# @return [String] The name of the source.
|
12
|
-
#
|
13
|
-
def name
|
14
|
-
raise StandardError, 'Abstract method.'
|
15
|
-
end
|
16
|
-
|
17
|
-
# @return [String] The URL of the source.
|
18
|
-
#
|
19
|
-
def url
|
20
|
-
raise StandardError, 'Abstract method.'
|
21
|
-
end
|
22
|
-
|
23
|
-
# @return [String] The user friendly type of the source.
|
24
|
-
#
|
25
|
-
def type
|
26
|
-
raise StandardError, 'Abstract method.'
|
27
|
-
end
|
28
|
-
|
29
|
-
# @return [Array<String>] The list of the name of all the Pods known to
|
30
|
-
# the Source.
|
31
|
-
#
|
32
|
-
def pods
|
33
|
-
raise StandardError, 'Abstract method.'
|
34
|
-
end
|
35
|
-
|
36
|
-
# @return [Array<String>] All the available versions of a given Pod,
|
37
|
-
# sorted from highest to lowest.
|
38
|
-
#
|
39
|
-
# @param [String] name
|
40
|
-
# The name of the Pod.
|
41
|
-
#
|
42
|
-
def versions(_name)
|
43
|
-
raise StandardError, 'Abstract method.'
|
44
|
-
end
|
45
|
-
|
46
|
-
# @return [Specification] The specification for a given version of a Pod.
|
47
|
-
#
|
48
|
-
# @param [String] name
|
49
|
-
# The name of the Pod.
|
50
|
-
#
|
51
|
-
# @param [String] version
|
52
|
-
# The version of the Pod.
|
53
|
-
#
|
54
|
-
def specification(_name, _version)
|
55
|
-
raise StandardError, 'Abstract method.'
|
56
|
-
end
|
57
|
-
|
58
|
-
# @return [Specification] The contents of the specification for a given
|
59
|
-
# version of a Pod.
|
60
|
-
#
|
61
|
-
# @param [String] name
|
62
|
-
# the name of the Pod.
|
63
|
-
#
|
64
|
-
# @param [String] version
|
65
|
-
# the version of the Pod.
|
66
|
-
#
|
67
|
-
def specification_contents(_name, _version)
|
68
|
-
raise StandardError, 'Abstract method.'
|
69
|
-
end
|
70
|
-
|
71
|
-
#-----------------------------------------------------------------------#
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,162 +0,0 @@
|
|
1
|
-
module Pod
|
2
|
-
class Source
|
3
|
-
# Data provider for a `Pod::Source` backed by a repository hosted in the
|
4
|
-
# file system.
|
5
|
-
#
|
6
|
-
class FileSystemDataProvider < AbstractDataProvider
|
7
|
-
# @return [Pathname] The path where the source is stored.
|
8
|
-
#
|
9
|
-
attr_reader :repo
|
10
|
-
|
11
|
-
# @param [Pathname, String] repo @see #repo.
|
12
|
-
#
|
13
|
-
def initialize(repo)
|
14
|
-
@repo = Pathname.new(repo)
|
15
|
-
end
|
16
|
-
|
17
|
-
public
|
18
|
-
|
19
|
-
# @group Required methods
|
20
|
-
#-----------------------------------------------------------------------#
|
21
|
-
|
22
|
-
# @return [String] The name of the source.
|
23
|
-
#
|
24
|
-
def name
|
25
|
-
repo.basename.to_s
|
26
|
-
end
|
27
|
-
|
28
|
-
# @return [String] The URL of the source.
|
29
|
-
#
|
30
|
-
def url
|
31
|
-
Dir.chdir(repo) do
|
32
|
-
remote = `git ls-remote --get-url`.chomp
|
33
|
-
remote if $?.success?
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# @return [String] The user friendly type of the source.
|
38
|
-
#
|
39
|
-
def type
|
40
|
-
'file system'
|
41
|
-
end
|
42
|
-
|
43
|
-
# @return [Array<String>] The list of the name of all the Pods known to
|
44
|
-
# the Source.
|
45
|
-
#
|
46
|
-
# @note Using Pathname#children is sensibly slower.
|
47
|
-
#
|
48
|
-
def pods
|
49
|
-
return nil unless specs_dir
|
50
|
-
specs_dir_as_string = specs_dir.to_s
|
51
|
-
Dir.entries(specs_dir).select do |entry|
|
52
|
-
valid_name = entry[0, 1] != '.'
|
53
|
-
valid_name && File.directory?(File.join(specs_dir_as_string, entry))
|
54
|
-
end.sort
|
55
|
-
end
|
56
|
-
|
57
|
-
# @return [Array<String>] All the available versions of a given Pod,
|
58
|
-
# sorted from highest to lowest.
|
59
|
-
#
|
60
|
-
# @param [String] name
|
61
|
-
# The name of the Pod.
|
62
|
-
#
|
63
|
-
def versions(name)
|
64
|
-
return nil unless specs_dir
|
65
|
-
raise ArgumentError, 'No name' unless name
|
66
|
-
pod_dir = specs_dir + name
|
67
|
-
return unless pod_dir.exist?
|
68
|
-
pod_dir.children.map do |v|
|
69
|
-
basename = v.basename.to_s
|
70
|
-
begin
|
71
|
-
Version.new(basename) if v.directory? && basename[0, 1] != '.'
|
72
|
-
rescue ArgumentError => e
|
73
|
-
raise Informative, 'An unexpected version directory ' \
|
74
|
-
"`#{basename}` was encountered for the " \
|
75
|
-
"`#{pod_dir}` Pod in the `#{name}` repository."
|
76
|
-
end
|
77
|
-
end.compact.sort.reverse.map(&:to_s)
|
78
|
-
end
|
79
|
-
|
80
|
-
# @return [Specification] The specification for a given version of a Pod.
|
81
|
-
#
|
82
|
-
# @param [String] name
|
83
|
-
# The name of the Pod.
|
84
|
-
#
|
85
|
-
# @param [String] version
|
86
|
-
# The version of the Pod.
|
87
|
-
#
|
88
|
-
def specification(name, version)
|
89
|
-
path = specification_path(name, version)
|
90
|
-
Pod::Specification.from_file(path) if path && path.exist?
|
91
|
-
end
|
92
|
-
|
93
|
-
# @return [Specification] The contents of the specification for a given
|
94
|
-
# version of a Pod.
|
95
|
-
#
|
96
|
-
# @param [String] name
|
97
|
-
# the name of the Pod.
|
98
|
-
#
|
99
|
-
# @param [String] version
|
100
|
-
# the version of the Pod.
|
101
|
-
#
|
102
|
-
def specification_contents(name, version)
|
103
|
-
path = specification_path(name, version)
|
104
|
-
File.open(path, 'r:utf-8') { |f| f.read } if path && path.exist?
|
105
|
-
end
|
106
|
-
|
107
|
-
public
|
108
|
-
|
109
|
-
# @group Other methods
|
110
|
-
#-----------------------------------------------------------------------#
|
111
|
-
|
112
|
-
# Returns the path of the specification with the given name and version.
|
113
|
-
#
|
114
|
-
# @param [String] name
|
115
|
-
# the name of the Pod.
|
116
|
-
#
|
117
|
-
# @param [Version,String] version
|
118
|
-
# the version for the specification.
|
119
|
-
#
|
120
|
-
# @return [Pathname] The path of the specification.
|
121
|
-
#
|
122
|
-
def specification_path(name, version)
|
123
|
-
raise ArgumentError, 'No name' unless name
|
124
|
-
raise ArgumentError, 'No version' unless version
|
125
|
-
return nil unless specs_dir
|
126
|
-
path = specs_dir + name + version.to_s
|
127
|
-
specification_path = path + "#{name}.podspec.json"
|
128
|
-
specification_path.exist?
|
129
|
-
unless specification_path.exist?
|
130
|
-
specification_path = path + "#{name}.podspec"
|
131
|
-
end
|
132
|
-
specification_path
|
133
|
-
end
|
134
|
-
|
135
|
-
private
|
136
|
-
|
137
|
-
# @group Private Helpers
|
138
|
-
#-----------------------------------------------------------------------#
|
139
|
-
|
140
|
-
# @return [Pathname] The directory where the specs are stored.
|
141
|
-
#
|
142
|
-
# @note In previous versions of CocoaPods they used to be stored in
|
143
|
-
# the root of the repo. This lead to issues, especially with
|
144
|
-
# the GitHub interface and now the are stored in a dedicated
|
145
|
-
# folder.
|
146
|
-
#
|
147
|
-
def specs_dir
|
148
|
-
unless @specs_dir
|
149
|
-
specs_sub_dir = repo + 'Specs'
|
150
|
-
if specs_sub_dir.exist?
|
151
|
-
@specs_dir = specs_sub_dir
|
152
|
-
elsif repo.exist?
|
153
|
-
@specs_dir = repo
|
154
|
-
end
|
155
|
-
end
|
156
|
-
@specs_dir
|
157
|
-
end
|
158
|
-
|
159
|
-
#-----------------------------------------------------------------------#
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|