cocoapods 0.16.4 → 0.17.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +108 -0
- data/README.md +3 -3
- data/bin/pod +1 -1
- data/lib/cocoapods.rb +31 -31
- data/lib/cocoapods/command.rb +62 -107
- data/lib/cocoapods/command/inter_process_communication.rb +103 -0
- data/lib/cocoapods/command/list.rb +45 -44
- data/lib/cocoapods/command/outdated.rb +28 -25
- data/lib/cocoapods/command/project.rb +90 -0
- data/lib/cocoapods/command/push.rb +50 -32
- data/lib/cocoapods/command/repo.rb +125 -155
- data/lib/cocoapods/command/search.rb +23 -12
- data/lib/cocoapods/command/setup.rb +103 -64
- data/lib/cocoapods/command/spec.rb +329 -90
- data/lib/cocoapods/config.rb +197 -44
- data/lib/cocoapods/downloader.rb +47 -34
- data/lib/cocoapods/executable.rb +98 -41
- data/lib/cocoapods/external_sources.rb +325 -0
- data/lib/cocoapods/file_list.rb +8 -1
- data/lib/cocoapods/gem_version.rb +7 -0
- data/lib/cocoapods/generator/acknowledgements.rb +71 -7
- data/lib/cocoapods/generator/acknowledgements/markdown.rb +10 -9
- data/lib/cocoapods/generator/acknowledgements/plist.rb +9 -8
- data/lib/cocoapods/generator/copy_resources_script.rb +2 -2
- data/lib/cocoapods/generator/documentation.rb +153 -37
- data/lib/cocoapods/generator/prefix_header.rb +82 -0
- data/lib/cocoapods/generator/target_header.rb +58 -0
- data/lib/cocoapods/generator/xcconfig.rb +130 -0
- data/lib/cocoapods/hooks/installer_representation.rb +123 -0
- data/lib/cocoapods/hooks/library_representation.rb +79 -0
- data/lib/cocoapods/hooks/pod_representation.rb +74 -0
- data/lib/cocoapods/installer.rb +398 -147
- data/lib/cocoapods/installer/analyzer.rb +556 -0
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +253 -0
- data/lib/cocoapods/installer/file_references_installer.rb +179 -0
- data/lib/cocoapods/installer/pod_source_installer.rb +289 -0
- data/lib/cocoapods/installer/target_installer.rb +307 -112
- data/lib/cocoapods/installer/user_project_integrator.rb +140 -176
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +193 -0
- data/lib/cocoapods/library.rb +195 -0
- data/lib/cocoapods/open_uri.rb +16 -14
- data/lib/cocoapods/project.rb +175 -52
- data/lib/cocoapods/resolver.rb +151 -164
- data/lib/cocoapods/sandbox.rb +276 -54
- data/lib/cocoapods/sandbox/file_accessor.rb +210 -0
- data/lib/cocoapods/sandbox/headers_store.rb +96 -0
- data/lib/cocoapods/sandbox/path_list.rb +178 -0
- data/lib/cocoapods/sources_manager.rb +218 -0
- data/lib/cocoapods/user_interface.rb +82 -18
- data/lib/cocoapods/{command → user_interface}/error_report.rb +5 -5
- data/lib/cocoapods/validator.rb +379 -0
- metadata +74 -55
- data/lib/cocoapods/command/install.rb +0 -55
- data/lib/cocoapods/command/linter.rb +0 -317
- data/lib/cocoapods/command/update.rb +0 -25
- data/lib/cocoapods/dependency.rb +0 -285
- data/lib/cocoapods/downloader/git.rb +0 -276
- data/lib/cocoapods/downloader/http.rb +0 -99
- data/lib/cocoapods/downloader/mercurial.rb +0 -26
- data/lib/cocoapods/downloader/subversion.rb +0 -42
- data/lib/cocoapods/local_pod.rb +0 -620
- data/lib/cocoapods/lockfile.rb +0 -274
- data/lib/cocoapods/platform.rb +0 -127
- data/lib/cocoapods/podfile.rb +0 -551
- data/lib/cocoapods/source.rb +0 -223
- data/lib/cocoapods/specification.rb +0 -579
- data/lib/cocoapods/specification/set.rb +0 -175
- data/lib/cocoapods/specification/statistics.rb +0 -112
- data/lib/cocoapods/user_interface/ui_pod.rb +0 -130
- data/lib/cocoapods/version.rb +0 -26
@@ -0,0 +1,325 @@
|
|
1
|
+
module Pod
|
2
|
+
|
3
|
+
# Provides support for initializing the correct concrete class of an external
|
4
|
+
# source.
|
5
|
+
#
|
6
|
+
module ExternalSources
|
7
|
+
|
8
|
+
# @return [AbstractExternalSource] an initialized instance of the concrete
|
9
|
+
# external source class associated with the option specified in the
|
10
|
+
# hash.
|
11
|
+
#
|
12
|
+
def self.from_dependency(dependency, podfile_path)
|
13
|
+
name = dependency.root_name
|
14
|
+
params = dependency.external_source
|
15
|
+
|
16
|
+
klass = if params.key?(:git) then GitSource
|
17
|
+
elsif params.key?(:svn) then SvnSource
|
18
|
+
elsif params.key?(:hg) then MercurialSource
|
19
|
+
elsif params.key?(:podspec) then PodspecSource
|
20
|
+
elsif params.key?(:local) then LocalSource
|
21
|
+
end
|
22
|
+
|
23
|
+
if klass
|
24
|
+
klass.new(name, params, podfile_path)
|
25
|
+
else
|
26
|
+
msg = "Unknown external source parameters for `#{name}`: `#{params}`"
|
27
|
+
raise Informative, msg
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
#-------------------------------------------------------------------------#
|
32
|
+
|
33
|
+
# Abstract class that defines the common behaviour of external sources.
|
34
|
+
#
|
35
|
+
class AbstractExternalSource
|
36
|
+
|
37
|
+
# @return [String] the name of the Pod described by this external source.
|
38
|
+
#
|
39
|
+
attr_reader :name
|
40
|
+
|
41
|
+
# @return [Hash{Symbol => String}] the hash representation of the
|
42
|
+
# external source.
|
43
|
+
#
|
44
|
+
attr_reader :params
|
45
|
+
|
46
|
+
# @return [String] the path where the podfile is defined to resolve
|
47
|
+
# relative paths.
|
48
|
+
#
|
49
|
+
attr_reader :podfile_path
|
50
|
+
|
51
|
+
# @param [String] name @see name
|
52
|
+
# @param [Hash] params @see params
|
53
|
+
# @param [String] podfile_path @see podfile_path
|
54
|
+
#
|
55
|
+
def initialize(name, params, podfile_path)
|
56
|
+
@name = name
|
57
|
+
@params = params
|
58
|
+
@podfile_path = podfile_path
|
59
|
+
end
|
60
|
+
|
61
|
+
# @return [Bool] whether an external source source is equal to another
|
62
|
+
# according to the {#name} and to the {#params}.
|
63
|
+
#
|
64
|
+
def ==(other)
|
65
|
+
return false if other.nil?
|
66
|
+
name == other.name && params == other.params
|
67
|
+
end
|
68
|
+
|
69
|
+
#--------------------------------------#
|
70
|
+
|
71
|
+
public
|
72
|
+
|
73
|
+
# @!group Fetching
|
74
|
+
|
75
|
+
# Fetches the external source from the remote according to the params.
|
76
|
+
#
|
77
|
+
# @param [Sandbox] sandbox
|
78
|
+
# the sandbox where the specification should be stored.
|
79
|
+
#
|
80
|
+
# @return [void]
|
81
|
+
#
|
82
|
+
def fetch(sandbox)
|
83
|
+
raise "Abstract method"
|
84
|
+
end
|
85
|
+
|
86
|
+
#--------------------------------------#
|
87
|
+
|
88
|
+
public
|
89
|
+
|
90
|
+
# @!group Subclasses hooks
|
91
|
+
|
92
|
+
# Fetches the external source from the remote according to the params.
|
93
|
+
#
|
94
|
+
# @param [Sandbox] sandbox
|
95
|
+
# the sandbox where the specification should be stored.
|
96
|
+
#
|
97
|
+
# @return [void]
|
98
|
+
#
|
99
|
+
def fetch(sandbox)
|
100
|
+
raise "Abstract method"
|
101
|
+
end
|
102
|
+
|
103
|
+
# @return [String] a string representation of the source suitable for UI.
|
104
|
+
#
|
105
|
+
def description
|
106
|
+
raise "Abstract method"
|
107
|
+
end
|
108
|
+
|
109
|
+
#--------------------------------------#
|
110
|
+
|
111
|
+
private
|
112
|
+
|
113
|
+
# @! Subclasses helpers
|
114
|
+
|
115
|
+
# Pre-downloads a Pod passing the options to the downloader and informing
|
116
|
+
# the sandbox.
|
117
|
+
#
|
118
|
+
# @param [Sandbox] sandbox
|
119
|
+
# The sandbox where the Pod should be downloaded.
|
120
|
+
#
|
121
|
+
# @note To prevent a double download of the repository the pod is
|
122
|
+
# marked as pre-downloaded indicating to the installer that only
|
123
|
+
# clean operations are needed.
|
124
|
+
#
|
125
|
+
# @return [void]
|
126
|
+
#
|
127
|
+
def pre_download(sandbox)
|
128
|
+
UI.titled_section("Pre-downloading: `#{name}` #{description}", { :verbose_prefix => "-> " }) do
|
129
|
+
target = sandbox.root + name
|
130
|
+
target.rmtree if target.exist?
|
131
|
+
downloader = Downloader.for_target(target, params)
|
132
|
+
downloader.download
|
133
|
+
store_podspec(sandbox, target + "#{name}.podspec")
|
134
|
+
sandbox.store_pre_downloaded_pod(name)
|
135
|
+
if downloader.options_specific?
|
136
|
+
source = params
|
137
|
+
else
|
138
|
+
source = downloader.checkout_options
|
139
|
+
end
|
140
|
+
sandbox.store_checkout_source(name, source)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# Stores the podspec in the sandbox and marks it as from an external
|
145
|
+
# source.
|
146
|
+
#
|
147
|
+
# @param [Sandbox] sandbox
|
148
|
+
# The sandbox where the specification should be stored.
|
149
|
+
#
|
150
|
+
# @param [Pathname, String] spec
|
151
|
+
# The path of the specification or its contents.
|
152
|
+
#
|
153
|
+
# @note All the concrete implementations of #{fetch} should invoke this
|
154
|
+
# method.
|
155
|
+
#
|
156
|
+
# @note The sandbox ensures that the podspec exists and that the names
|
157
|
+
# match.
|
158
|
+
#
|
159
|
+
# @return [void]
|
160
|
+
#
|
161
|
+
def store_podspec(sandbox, spec)
|
162
|
+
sandbox.store_podspec(name, spec, true)
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
166
|
+
|
167
|
+
#-------------------------------------------------------------------------#
|
168
|
+
|
169
|
+
# Provides support for fetching a specification file from a Git remote.
|
170
|
+
#
|
171
|
+
# Supports all the options of the downloader (is similar to the git key of
|
172
|
+
# `source` attribute of a specification).
|
173
|
+
#
|
174
|
+
# @note The podspec must be in the root of the repository and should have a
|
175
|
+
# name matching the one of the dependency.
|
176
|
+
#
|
177
|
+
class GitSource < AbstractExternalSource
|
178
|
+
|
179
|
+
# @see AbstractExternalSource#fetch
|
180
|
+
#
|
181
|
+
def fetch(sandbox)
|
182
|
+
pre_download(sandbox)
|
183
|
+
end
|
184
|
+
|
185
|
+
# @see AbstractExternalSource#description
|
186
|
+
#
|
187
|
+
def description
|
188
|
+
"from `#{params[:git]}`".tap do |description|
|
189
|
+
description << ", commit `#{params[:commit]}`" if params[:commit]
|
190
|
+
description << ", branch `#{params[:branch]}`" if params[:branch]
|
191
|
+
description << ", tag `#{params[:tag]}`" if params[:tag]
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
#-------------------------------------------------------------------------#
|
197
|
+
|
198
|
+
# Provides support for fetching a specification file from a SVN source
|
199
|
+
# remote.
|
200
|
+
#
|
201
|
+
# Supports all the options of the downloader (is similar to the git key of
|
202
|
+
# `source` attribute of a specification).
|
203
|
+
#
|
204
|
+
# @note The podspec must be in the root of the repository and should have a
|
205
|
+
# name matching the one of the dependency.
|
206
|
+
#
|
207
|
+
class SvnSource < AbstractExternalSource
|
208
|
+
|
209
|
+
# @see AbstractExternalSource#fetch
|
210
|
+
#
|
211
|
+
def fetch(sandbox)
|
212
|
+
pre_download(sandbox)
|
213
|
+
end
|
214
|
+
|
215
|
+
# @see AbstractExternalSource#description
|
216
|
+
#
|
217
|
+
def description
|
218
|
+
"from `#{params[:svn]}`".tap do |description|
|
219
|
+
description << ", folder `#{params[:folder]}`" if params[:folder]
|
220
|
+
description << ", tag `#{params[:tag]}`" if params[:tag]
|
221
|
+
description << ", revision `#{params[:revision]}`" if params[:revision]
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
#-------------------------------------------------------------------------#
|
227
|
+
|
228
|
+
# Provides support for fetching a specification file from a Mercurial
|
229
|
+
# source remote.
|
230
|
+
#
|
231
|
+
# Supports all the options of the downloader (is similar to the git key of
|
232
|
+
# `source` attribute of a specification).
|
233
|
+
#
|
234
|
+
# @note The podspec must be in the root of the repository and should have a
|
235
|
+
# name matching the one of the dependency.
|
236
|
+
#
|
237
|
+
class MercurialSource < AbstractExternalSource
|
238
|
+
|
239
|
+
# @see AbstractExternalSource#fetch
|
240
|
+
#
|
241
|
+
def fetch(sandbox)
|
242
|
+
pre_download(sandbox)
|
243
|
+
end
|
244
|
+
|
245
|
+
# @see AbstractExternalSource#description
|
246
|
+
#
|
247
|
+
def description
|
248
|
+
"from `#{params[:hg]}`".tap do |description|
|
249
|
+
description << ", revision `#{params[:revision]}`" if params[:revision]
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
#-------------------------------------------------------------------------#
|
255
|
+
|
256
|
+
# Provides support for fetching a specification file from an URL. Can be
|
257
|
+
# http, file, etc.
|
258
|
+
#
|
259
|
+
class PodspecSource < AbstractExternalSource
|
260
|
+
|
261
|
+
# @see AbstractExternalSource#fetch
|
262
|
+
#
|
263
|
+
def fetch(sandbox)
|
264
|
+
UI.titled_section("Fetching podspec for `#{name}` #{description}", { :verbose_prefix => "-> " }) do
|
265
|
+
path = params[:podspec]
|
266
|
+
path = Pathname.new(path).expand_path if path.to_s.start_with?("~")
|
267
|
+
require 'open-uri'
|
268
|
+
open(path) { |io| store_podspec(sandbox, io.read) }
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
# @see AbstractExternalSource#description
|
273
|
+
#
|
274
|
+
def description
|
275
|
+
"from `#{params[:podspec]}`"
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
#-------------------------------------------------------------------------#
|
280
|
+
|
281
|
+
# Provides support for fetching a specification file from a path local to
|
282
|
+
# the machine running the installation.
|
283
|
+
#
|
284
|
+
# Works with the {LocalPod::LocalSourcedPod} class.
|
285
|
+
#
|
286
|
+
class LocalSource < AbstractExternalSource
|
287
|
+
|
288
|
+
# @see AbstractExternalSource#fetch
|
289
|
+
#
|
290
|
+
def fetch(sandbox)
|
291
|
+
UI.titled_section("Fetching podspec for `#{name}` #{description}", { :verbose_prefix => "-> " }) do
|
292
|
+
podspec = pod_spec_path
|
293
|
+
store_podspec(sandbox, podspec)
|
294
|
+
sandbox.store_local_path(name, podspec.dirname)
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
# @see AbstractExternalSource#description
|
299
|
+
#
|
300
|
+
def description
|
301
|
+
"from `#{params[:local]}`"
|
302
|
+
end
|
303
|
+
|
304
|
+
#--------------------------------------#
|
305
|
+
|
306
|
+
private
|
307
|
+
|
308
|
+
# @!group Helpers
|
309
|
+
|
310
|
+
# @return [Pathname] the path of the podspec.
|
311
|
+
#
|
312
|
+
def pod_spec_path
|
313
|
+
declared_path = params[:local].to_s
|
314
|
+
path_with_ext = File.extname(declared_path) == '.podspec' ? declared_path : "#{declared_path}/#{name}.podspec"
|
315
|
+
path_without_tilde = path_with_ext.gsub('~', ENV['HOME'])
|
316
|
+
absolute_path = Pathname(podfile_path).dirname + path_without_tilde
|
317
|
+
|
318
|
+
unless absolute_path.exist?
|
319
|
+
raise Informative, "No podspec found for `#{name}` in `#{params[:local]}`"
|
320
|
+
end
|
321
|
+
absolute_path
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|
data/lib/cocoapods/file_list.rb
CHANGED
@@ -6,7 +6,9 @@ end
|
|
6
6
|
|
7
7
|
# This makes Rake::FileList usable with the Specification attributes
|
8
8
|
# source_files, public_header_files, preserve_paths, and resources.
|
9
|
-
|
9
|
+
#
|
10
|
+
# @todo This needs to be deprecated as we no have the PathList List
|
11
|
+
#
|
10
12
|
module Rake
|
11
13
|
class FileList
|
12
14
|
def prepend_patterns(pathname)
|
@@ -20,6 +22,11 @@ module Rake
|
|
20
22
|
def glob
|
21
23
|
to_a.map { |path| Pathname.new(path) }
|
22
24
|
end
|
25
|
+
|
26
|
+
def inspect
|
27
|
+
"<##{self.class} pending_add=#{@pending_add}>"
|
28
|
+
end
|
29
|
+
alias :to_s :inspect
|
23
30
|
end
|
24
31
|
end
|
25
32
|
|
@@ -3,35 +3,99 @@ module Pod
|
|
3
3
|
|
4
4
|
class Acknowledgements
|
5
5
|
|
6
|
+
# @return [Array<Class>] The classes of the acknowledgements generator
|
7
|
+
# subclasses.
|
8
|
+
#
|
6
9
|
def self.generators
|
7
10
|
[Plist, Markdown]
|
8
11
|
end
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
+
# @return [Array<Sandbox::FileAccessor>] the list of the file accessors
|
14
|
+
# for the specs of the target that needs to generate the
|
15
|
+
# acknowledgements.
|
16
|
+
#
|
17
|
+
attr_reader :file_accessors
|
13
18
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
19
|
+
# @param [Array<Sandbox::FileAccessor>] @see file_accessors.
|
20
|
+
#
|
21
|
+
def initialize(file_accessors)
|
22
|
+
@file_accessors = file_accessors
|
18
23
|
end
|
19
24
|
|
25
|
+
#-----------------------------------------------------------------------#
|
26
|
+
|
27
|
+
# !@group Configuration
|
28
|
+
|
29
|
+
# @return [String] The title of the acknowledgements file.
|
30
|
+
#
|
20
31
|
def header_title
|
21
32
|
"Acknowledgements"
|
22
33
|
end
|
23
34
|
|
35
|
+
# @return [String] A text to present before listing the acknowledgements.
|
36
|
+
#
|
24
37
|
def header_text
|
25
38
|
"This application makes use of the following third party libraries:"
|
26
39
|
end
|
27
40
|
|
41
|
+
# @return [String] The title of the foot notes.
|
42
|
+
#
|
28
43
|
def footnote_title
|
29
44
|
""
|
30
45
|
end
|
31
46
|
|
47
|
+
# @return [String] the foot notes.
|
48
|
+
#
|
32
49
|
def footnote_text
|
33
50
|
"Generated by CocoaPods - http://cocoapods.org"
|
34
51
|
end
|
52
|
+
|
53
|
+
#-----------------------------------------------------------------------#
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
# !@group Private methods
|
58
|
+
|
59
|
+
# @return [Array<Specification>] The root specifications for which the
|
60
|
+
# acknowledgements should be generated.
|
61
|
+
#
|
62
|
+
def specs
|
63
|
+
file_accessors.map{ |accessor| accessor.spec.root }.uniq
|
64
|
+
end
|
65
|
+
|
66
|
+
# Returns the text of the license for the given spec.
|
67
|
+
#
|
68
|
+
# @param [Specification] spec
|
69
|
+
# the specification for which license is needed.
|
70
|
+
#
|
71
|
+
# @return [String] The text of the license.
|
72
|
+
# @return [Nil] If not license text could be found.
|
73
|
+
#
|
74
|
+
def license_text(spec)
|
75
|
+
if spec.license
|
76
|
+
if text = spec.license[:text]
|
77
|
+
text
|
78
|
+
elsif license_file = file_accessor(spec).license
|
79
|
+
text = IO.read(license_file)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
protected
|
85
|
+
|
86
|
+
# Returns the file accessor for the given spec.
|
87
|
+
#
|
88
|
+
# @param [Specification] spec
|
89
|
+
# the specification for which the file accessor is needed.
|
90
|
+
#
|
91
|
+
# @return [Sandbox::FileAccessor] The file accessor.
|
92
|
+
#
|
93
|
+
def file_accessor(spec)
|
94
|
+
file_accessors.find { |accessor| accessor.spec.root == spec }
|
95
|
+
end
|
96
|
+
|
97
|
+
#-----------------------------------------------------------------------#
|
98
|
+
|
35
99
|
end
|
36
100
|
end
|
37
101
|
end
|