cocoapods 0.31.1 → 0.32.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/CHANGELOG.md +97 -0
- data/lib/cocoapods.rb +0 -21
- data/lib/cocoapods/command.rb +3 -0
- data/lib/cocoapods/command/lib.rb +8 -3
- data/lib/cocoapods/command/project.rb +36 -4
- data/lib/cocoapods/command/spec.rb +1 -1
- data/lib/cocoapods/external_sources.rb +18 -363
- data/lib/cocoapods/external_sources/abstract_external_source.rb +139 -0
- data/lib/cocoapods/external_sources/downloader_source.rb +32 -0
- data/lib/cocoapods/external_sources/path_source.rb +58 -0
- data/lib/cocoapods/external_sources/podspec_source.rb +45 -0
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/prefix_header.rb +14 -5
- data/lib/cocoapods/installer.rb +16 -8
- data/lib/cocoapods/installer/analyzer.rb +35 -7
- data/lib/cocoapods/sandbox.rb +17 -2
- data/lib/cocoapods/validator.rb +46 -8
- metadata +56 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af7d6a3b7351a1ce2268eaaa3eed8c42cfd4fbdc
|
4
|
+
data.tar.gz: f70c26b92240ccd444d2b654d377b008ddd00f68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb11133140778a88ed6ffcd50c85fcb9eca03986598396357bd503188ddccd3e91248537d438a7c83233da67db4058729c071cdb988051e2ae64e55dd2a5d971
|
7
|
+
data.tar.gz: dc8f39cf7327e565ae923b68daab0385f0917c8288fb7f19640583cba5d787d5cc0a7e2371326d9ad4977eb8f0089ae63aa5b7489747f69688e61e1f0d54a9b5
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,98 @@
|
|
2
2
|
|
3
3
|
To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides/installing_cocoapods.html).
|
4
4
|
|
5
|
+
## 0.32.0
|
6
|
+
|
7
|
+
[CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/master...0.31.1)
|
8
|
+
• [CocoaPods-Core](https://github.com/CocoaPods/Core/compare/master...0.31.1)
|
9
|
+
|
10
|
+
##### Enhancements
|
11
|
+
|
12
|
+
* Allow to update only a list of given pods with `pod update [POD_NAMES...]`.
|
13
|
+
[Marius Rackwitz](https://github.com/mrackwitz)
|
14
|
+
[CocoaPods#760](https://github.com/CocoaPods/CocoaPods/issues/760)
|
15
|
+
|
16
|
+
* `pod update` prints the previous version of the updated pods.
|
17
|
+
[Andrea Mazzini](https://github.com/andreamazz)
|
18
|
+
[#2008](https://github.com/CocoaPods/CocoaPods/issues/2008)
|
19
|
+
|
20
|
+
* `pod update` falls back to `pod install` if no Lockfile is present.
|
21
|
+
[Marius Rackwitz](https://github.com/mrackwitz)
|
22
|
+
|
23
|
+
* File references in the Pods project for development Pods now are absolute if
|
24
|
+
the dependency is specified with an absolute paths.
|
25
|
+
[Samuel Ford](https://github.com/samuelwford)
|
26
|
+
[#1042](https://github.com/CocoaPods/CocoaPods/issues/1042)
|
27
|
+
|
28
|
+
* Added `deprecated` and `deprecated_in_favor_of` attributes to Specification
|
29
|
+
DSL.
|
30
|
+
[Paul Young](https://github.com/paulyoung)
|
31
|
+
[Core#87](https://github.com/CocoaPods/Core/pull/87)
|
32
|
+
|
33
|
+
* Numerous improvements to the validator and to the linter.
|
34
|
+
* Validate the reachability of screenshot URLs in podspecs while linting a
|
35
|
+
specification.
|
36
|
+
[Kyle Fuller](https://github.com/kylef)
|
37
|
+
[#2010](https://github.com/CocoaPods/CocoaPods/issues/2010)
|
38
|
+
* Support HTTP redirects when linting homepage and screenshots.
|
39
|
+
[Boris Bügling](https://github.com/neonichu)
|
40
|
+
[#2027](https://github.com/CocoaPods/CocoaPods/pull/2027)
|
41
|
+
* The linter now checks `framework` and `library` attributes for invalid
|
42
|
+
strings.
|
43
|
+
[Paul Williamson](https://github.com/squarefrog)
|
44
|
+
[Fabio Pelosin](irrationalfab)
|
45
|
+
[Core#66](https://github.com/CocoaPods/Core/issues/66)
|
46
|
+
[Core#96](https://github.com/CocoaPods/Core/pull/96)
|
47
|
+
[Core#105](https://github.com/CocoaPods/Core/issues/105)
|
48
|
+
* The Linter will not check for comments anymore.
|
49
|
+
[Fabio Pelosin][irrationalfab]
|
50
|
+
[Core#108](https://github.com/CocoaPods/Core/issues/108)
|
51
|
+
* Removed legacy checks from the linter.
|
52
|
+
[Fabio Pelosin][irrationalfab]
|
53
|
+
[Core#108](https://github.com/CocoaPods/Core/issues/108)
|
54
|
+
* Added logic to handle subspecs and platform scopes to linter check of
|
55
|
+
the `requries_arc` attribute.
|
56
|
+
[Fabio Pelosin][irrationalfab]
|
57
|
+
[CocoaPods#2005](https://github.com/CocoaPods/CocoaPods/issues/2005)
|
58
|
+
* The linter no longer considers empty a Specification if it only specifies the
|
59
|
+
`resource_bundle` attribute.
|
60
|
+
[Joshua Kalpin][Kapin]
|
61
|
+
[#63](https://github.com/CocoaPods/Core/issues/63)
|
62
|
+
[#95](https://github.com/CocoaPods/Core/pull/95)
|
63
|
+
|
64
|
+
* `pod lib create` is now using the `configure` file instead of the
|
65
|
+
`_CONFIGURE.rb` file.
|
66
|
+
[Piet Brauer](https://github.com/pietbrauer)
|
67
|
+
[Orta Therox](https://github.com/orta)
|
68
|
+
|
69
|
+
* `pod lib create` now disallows any pod name that begins with a `.`
|
70
|
+
[Dustin Clark](https://github.com/clarkda)
|
71
|
+
[#2026](https://github.com/CocoaPods/CocoaPods/pull/2026)
|
72
|
+
[Core#97](https://github.com/CocoaPods/Core/pull/97)
|
73
|
+
[Core#98](https://github.com/CocoaPods/Core/issues/98)
|
74
|
+
|
75
|
+
* Prevent the user from using `pod` commands as root.
|
76
|
+
[Kyle Fuller](https://github.com/kylef)
|
77
|
+
[#1815](https://github.com/CocoaPods/CocoaPods/issues/1815)
|
78
|
+
|
79
|
+
* Dependencies declared with external sources now support HTTP downloads and
|
80
|
+
have improved support for all the options supported by the downloader.
|
81
|
+
[Fabio Pelosin][irrationalfab]
|
82
|
+
|
83
|
+
* An informative error message is presented when merge conflict is detected in
|
84
|
+
a YAML file.
|
85
|
+
[Luis de la Rosa](https://github.com/luisdelarosa)
|
86
|
+
[#69](https://github.com/CocoaPods/Core/issues/69)
|
87
|
+
[#100](https://github.com/CocoaPods/Core/pull/100)
|
88
|
+
|
89
|
+
##### Bug Fixes
|
90
|
+
|
91
|
+
* Fixed the Podfile `default_subspec` attribute in nested subspecs.
|
92
|
+
[Fabio Pelosin][irrationalfab]
|
93
|
+
[#1021](https://github.com/CocoaPods/CocoaPods/issues/1021)
|
94
|
+
|
95
|
+
|
96
|
+
|
5
97
|
## 0.31.1
|
6
98
|
[CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/0.31.1...0.31.0)
|
7
99
|
• [CocoaPods-Core](https://github.com/CocoaPods/Core/compare/0.31.1...0.31.0)
|
@@ -37,6 +129,11 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
|
|
37
129
|
[Robert Zuber](https://github.com/z00b)
|
38
130
|
[#1617](https://github.com/CocoaPods/CocoaPods/issues/1617)
|
39
131
|
|
132
|
+
* Generated prefix header file will now have unique prefix_header_contents for
|
133
|
+
Pods with subspecs.
|
134
|
+
[Luis de la Rosa](https://github.com/luisdelarosa)
|
135
|
+
[#1449](https://github.com/CocoaPods/CocoaPods/issues/1449)
|
136
|
+
|
40
137
|
* The linter will now check the reachability of the homepage of Podspecs during
|
41
138
|
a full lint.
|
42
139
|
[Richard Lee](https://github.com/dlackty)
|
data/lib/cocoapods.rb
CHANGED
@@ -72,24 +72,3 @@ if ENV['COCOA_PODS_ENV'] == 'development'
|
|
72
72
|
# require 'awesome_print'
|
73
73
|
# require 'pry'
|
74
74
|
end
|
75
|
-
|
76
|
-
# TODO remove for CocoaPods 0.31
|
77
|
-
#
|
78
|
-
module Pod
|
79
|
-
class Specification
|
80
|
-
def pre_install(&block)
|
81
|
-
UI.warn "[#{self}] The pre install hook of the specification " \
|
82
|
-
"DSL has been deprecated, use the `resource_bundles` or the " \
|
83
|
-
"`prepare_command` attributes."
|
84
|
-
UI.puts "[#{self}] The pre_install hook will be removed in the next release".red
|
85
|
-
@pre_install_callback = block
|
86
|
-
end
|
87
|
-
def post_install(&block)
|
88
|
-
UI.warn "[#{self}] The post install hook of the specification " \
|
89
|
-
"DSL has been deprecated, use the `resource_bundles` or the " \
|
90
|
-
"`prepare_command` attributes."
|
91
|
-
UI.puts "[#{self}] The post_install hook will be removed in the next release".red
|
92
|
-
@post_install_callback = block
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
data/lib/cocoapods/command.rb
CHANGED
@@ -43,11 +43,14 @@ module Pod
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def self.run(argv)
|
46
|
+
help! "You cannot run CocoaPods as root." if Process.uid == 0
|
47
|
+
|
46
48
|
argv = CLAide::ARGV.new(argv)
|
47
49
|
if argv.flag?('version')
|
48
50
|
UI.puts VERSION
|
49
51
|
exit 0
|
50
52
|
end
|
53
|
+
|
51
54
|
super(argv)
|
52
55
|
UI.print_warnings
|
53
56
|
end
|
@@ -26,6 +26,7 @@ module Pod
|
|
26
26
|
super
|
27
27
|
help! "A name for the Pod is required." unless @name
|
28
28
|
help! "The Pod name cannot contain spaces." if @name.match(/\s/)
|
29
|
+
help! "The Pod name cannot begin with a '.'" if @name[0, 1] == '.'
|
29
30
|
end
|
30
31
|
|
31
32
|
def run
|
@@ -54,7 +55,7 @@ module Pod
|
|
54
55
|
# @return [void]
|
55
56
|
#
|
56
57
|
def clone_template
|
57
|
-
UI.section("
|
58
|
+
UI.section("Cloning `#{template_repo_url}` into `#{@name}`.") do
|
58
59
|
git!"clone '#{template_repo_url}' #{@name}"
|
59
60
|
end
|
60
61
|
end
|
@@ -64,9 +65,13 @@ module Pod
|
|
64
65
|
# @return [void]
|
65
66
|
#
|
66
67
|
def configure_template
|
67
|
-
UI.section("Configuring template") do
|
68
|
+
UI.section("Configuring #{@name} template.") do
|
68
69
|
Dir.chdir(@name) do
|
69
|
-
|
70
|
+
if File.exists? "configure"
|
71
|
+
system "./configure #{@name}"
|
72
|
+
else
|
73
|
+
UI.warn "Template does not have a configure file."
|
74
|
+
end
|
70
75
|
end
|
71
76
|
end
|
72
77
|
end
|
@@ -28,13 +28,15 @@ module Pod
|
|
28
28
|
|
29
29
|
# Runs the installer.
|
30
30
|
#
|
31
|
-
# @param [
|
31
|
+
# @param [Hash, Boolean, nil] update
|
32
|
+
# Pods that have been requested to be updated or true if all Pods
|
33
|
+
# should be updated
|
32
34
|
#
|
33
35
|
# @return [void]
|
34
36
|
#
|
35
37
|
def run_install_with_update(update)
|
36
38
|
installer = Installer.new(config.sandbox, config.podfile, config.lockfile)
|
37
|
-
installer.
|
39
|
+
installer.update = update
|
38
40
|
installer.install!
|
39
41
|
end
|
40
42
|
end
|
@@ -76,10 +78,40 @@ module Pod
|
|
76
78
|
|
77
79
|
self.summary = 'Update outdated project dependencies'
|
78
80
|
|
81
|
+
self.description = <<-DESC
|
82
|
+
Updates the Pods identified by the specified POD_NAMES. If no POD_NAMES are
|
83
|
+
specified it updates all the Pods ignoring the contents of the Podfile.lock.
|
84
|
+
This command is reserved to the update of dependencies and pod install should
|
85
|
+
be used to install changes to the Podfile.
|
86
|
+
DESC
|
87
|
+
|
88
|
+
self.arguments = '[POD_NAMES...]'
|
89
|
+
|
90
|
+
def initialize(argv)
|
91
|
+
@pods = argv.arguments! unless argv.arguments.empty?
|
92
|
+
super
|
93
|
+
end
|
94
|
+
|
79
95
|
def run
|
80
96
|
verify_podfile_exists!
|
81
|
-
|
82
|
-
|
97
|
+
|
98
|
+
if @pods
|
99
|
+
verify_lockfile_exists!
|
100
|
+
|
101
|
+
# Check if all given pods are installed
|
102
|
+
missing_pods = @pods.select { |pod| !config.lockfile.pod_names.include?(pod) }
|
103
|
+
if missing_pods.length > 0
|
104
|
+
raise Informative, (missing_pods.length > 1 \
|
105
|
+
? "Pods %s are not installed and cannot be updated" \
|
106
|
+
: "Pod %s is not installed and cannot be updated"
|
107
|
+
) % missing_pods.map { |p| "`#{p}'" }.join(', ')
|
108
|
+
end
|
109
|
+
|
110
|
+
run_install_with_update(:pods => @pods)
|
111
|
+
else
|
112
|
+
UI.puts "Update all pods".yellow unless @pods
|
113
|
+
run_install_with_update(true)
|
114
|
+
end
|
83
115
|
end
|
84
116
|
end
|
85
117
|
|
@@ -480,7 +480,7 @@ Pod::Spec.new do |s|
|
|
480
480
|
DESC
|
481
481
|
|
482
482
|
s.homepage = "#{data[:homepage]}"
|
483
|
-
# s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
|
483
|
+
# s.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif"
|
484
484
|
|
485
485
|
|
486
486
|
# ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
|
@@ -1,3 +1,8 @@
|
|
1
|
+
require 'cocoapods/external_sources/abstract_external_source'
|
2
|
+
require 'cocoapods/external_sources/downloader_source'
|
3
|
+
require 'cocoapods/external_sources/path_source'
|
4
|
+
require 'cocoapods/external_sources/podspec_source'
|
5
|
+
|
1
6
|
module Pod
|
2
7
|
|
3
8
|
# Provides support for initializing the correct concrete class of an external
|
@@ -13,20 +18,7 @@ module Pod
|
|
13
18
|
name = dependency.root_name
|
14
19
|
params = dependency.external_source
|
15
20
|
|
16
|
-
klass
|
17
|
-
elsif params.key?(:svn) then SvnSource
|
18
|
-
elsif params.key?(:hg) then MercurialSource
|
19
|
-
elsif params.key?(:bzr) then BazaarSource
|
20
|
-
elsif params.key?(:podspec) then PodspecSource
|
21
|
-
elsif params.key?(:path) then PathSource
|
22
|
-
end
|
23
|
-
|
24
|
-
if params.key?(:local)
|
25
|
-
klass = PathSource
|
26
|
-
UI.warn "The `:local` option of the Podfile has been renamed to `:path` and is deprecated." \
|
27
|
-
end
|
28
|
-
|
29
|
-
if klass
|
21
|
+
if klass = concrete_class_from_params(params)
|
30
22
|
klass.new(name, params, podfile_path)
|
31
23
|
else
|
32
24
|
msg = "Unknown external source parameters for `#{name}`: `#{params}`"
|
@@ -34,357 +26,20 @@ module Pod
|
|
34
26
|
end
|
35
27
|
end
|
36
28
|
|
37
|
-
|
38
|
-
|
39
|
-
# Abstract class that defines the common behaviour of external sources.
|
40
|
-
#
|
41
|
-
class AbstractExternalSource
|
42
|
-
|
43
|
-
# @return [String] the name of the Pod described by this external source.
|
44
|
-
#
|
45
|
-
attr_reader :name
|
46
|
-
|
47
|
-
# @return [Hash{Symbol => String}] the hash representation of the
|
48
|
-
# external source.
|
49
|
-
#
|
50
|
-
attr_reader :params
|
51
|
-
|
52
|
-
# @return [String] the path where the podfile is defined to resolve
|
53
|
-
# relative paths.
|
54
|
-
#
|
55
|
-
attr_reader :podfile_path
|
56
|
-
|
57
|
-
# @param [String] name @see name
|
58
|
-
# @param [Hash] params @see params
|
59
|
-
# @param [String] podfile_path @see podfile_path
|
60
|
-
#
|
61
|
-
def initialize(name, params, podfile_path)
|
62
|
-
@name = name
|
63
|
-
@params = params
|
64
|
-
@podfile_path = podfile_path
|
65
|
-
end
|
66
|
-
|
67
|
-
# @return [Bool] whether an external source source is equal to another
|
68
|
-
# according to the {#name} and to the {#params}.
|
69
|
-
#
|
70
|
-
def ==(other)
|
71
|
-
return false if other.nil?
|
72
|
-
name == other.name && params == other.params
|
73
|
-
end
|
74
|
-
|
75
|
-
#--------------------------------------#
|
76
|
-
|
77
|
-
public
|
78
|
-
|
79
|
-
# @!group Fetching
|
80
|
-
|
81
|
-
# Fetches the external source from the remote according to the params.
|
82
|
-
#
|
83
|
-
# @param [Sandbox] sandbox
|
84
|
-
# the sandbox where the specification should be stored.
|
85
|
-
#
|
86
|
-
# @return [void]
|
87
|
-
#
|
88
|
-
def fetch(sandbox)
|
89
|
-
raise "Abstract method"
|
90
|
-
end
|
91
|
-
|
92
|
-
#--------------------------------------#
|
93
|
-
|
94
|
-
public
|
95
|
-
|
96
|
-
# @!group Subclasses hooks
|
97
|
-
|
98
|
-
# Fetches the external source from the remote according to the params.
|
99
|
-
#
|
100
|
-
# @param [Sandbox] sandbox
|
101
|
-
# the sandbox where the specification should be stored.
|
102
|
-
#
|
103
|
-
# @return [void]
|
104
|
-
#
|
105
|
-
def fetch(sandbox)
|
106
|
-
raise "Abstract method"
|
107
|
-
end
|
108
|
-
|
109
|
-
# @return [String] a string representation of the source suitable for UI.
|
110
|
-
#
|
111
|
-
def description
|
112
|
-
raise "Abstract method"
|
113
|
-
end
|
114
|
-
|
115
|
-
#--------------------------------------#
|
116
|
-
|
117
|
-
private
|
118
|
-
|
119
|
-
# @! Subclasses helpers
|
120
|
-
|
121
|
-
# Pre-downloads a Pod passing the options to the downloader and informing
|
122
|
-
# the sandbox.
|
123
|
-
#
|
124
|
-
# @param [Sandbox] sandbox
|
125
|
-
# The sandbox where the Pod should be downloaded.
|
126
|
-
#
|
127
|
-
# @note To prevent a double download of the repository the pod is
|
128
|
-
# marked as pre-downloaded indicating to the installer that only
|
129
|
-
# clean operations are needed.
|
130
|
-
#
|
131
|
-
# @todo The downloader configuration is the same of the
|
132
|
-
# #{PodSourceInstaller} and it needs to be kept in sync.
|
133
|
-
#
|
134
|
-
# @return [void]
|
135
|
-
#
|
136
|
-
def pre_download(sandbox)
|
137
|
-
UI.titled_section("Pre-downloading: `#{name}` #{description}", { :verbose_prefix => "-> " }) do
|
138
|
-
target = sandbox.root + name
|
139
|
-
target.rmtree if target.exist?
|
140
|
-
downloader = Config.instance.downloader(target, params)
|
141
|
-
downloader.download
|
142
|
-
store_podspec(sandbox, target + "#{name}.podspec")
|
143
|
-
sandbox.store_pre_downloaded_pod(name)
|
144
|
-
if downloader.options_specific?
|
145
|
-
source = params
|
146
|
-
else
|
147
|
-
source = downloader.checkout_options
|
148
|
-
end
|
149
|
-
sandbox.store_checkout_source(name, source)
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
# Stores the podspec in the sandbox and marks it as from an external
|
154
|
-
# source.
|
155
|
-
#
|
156
|
-
# @param [Sandbox] sandbox
|
157
|
-
# The sandbox where the specification should be stored.
|
158
|
-
#
|
159
|
-
# @param [Pathname, String] spec
|
160
|
-
# The path of the specification or its contents.
|
161
|
-
#
|
162
|
-
# @note All the concrete implementations of #{fetch} should invoke this
|
163
|
-
# method.
|
164
|
-
#
|
165
|
-
# @note The sandbox ensures that the podspec exists and that the names
|
166
|
-
# match.
|
167
|
-
#
|
168
|
-
# @return [void]
|
169
|
-
#
|
170
|
-
def store_podspec(sandbox, spec)
|
171
|
-
sandbox.store_podspec(name, spec, true)
|
172
|
-
end
|
173
|
-
|
174
|
-
end
|
175
|
-
|
176
|
-
#-------------------------------------------------------------------------#
|
177
|
-
|
178
|
-
# Provides support for fetching a specification file from a Git remote.
|
179
|
-
#
|
180
|
-
# Supports all the options of the downloader (is similar to the git key of
|
181
|
-
# `source` attribute of a specification).
|
182
|
-
#
|
183
|
-
# @note The podspec must be in the root of the repository and should have a
|
184
|
-
# name matching the one of the dependency.
|
185
|
-
#
|
186
|
-
class GitSource < AbstractExternalSource
|
187
|
-
|
188
|
-
# @see AbstractExternalSource#fetch
|
189
|
-
#
|
190
|
-
def fetch(sandbox)
|
191
|
-
pre_download(sandbox)
|
192
|
-
end
|
193
|
-
|
194
|
-
# @see AbstractExternalSource#description
|
195
|
-
#
|
196
|
-
def description
|
197
|
-
"from `#{params[:git]}`".tap do |description|
|
198
|
-
description << ", commit `#{params[:commit]}`" if params[:commit]
|
199
|
-
description << ", branch `#{params[:branch]}`" if params[:branch]
|
200
|
-
description << ", tag `#{params[:tag]}`" if params[:tag]
|
201
|
-
end
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
#-------------------------------------------------------------------------#
|
206
|
-
|
207
|
-
# Provides support for fetching a specification file from a SVN source
|
208
|
-
# remote.
|
209
|
-
#
|
210
|
-
# Supports all the options of the downloader (is similar to the git key of
|
211
|
-
# `source` attribute of a specification).
|
212
|
-
#
|
213
|
-
# @note The podspec must be in the root of the repository and should have a
|
214
|
-
# name matching the one of the dependency.
|
215
|
-
#
|
216
|
-
class SvnSource < AbstractExternalSource
|
217
|
-
|
218
|
-
# @see AbstractExternalSource#fetch
|
219
|
-
#
|
220
|
-
def fetch(sandbox)
|
221
|
-
pre_download(sandbox)
|
222
|
-
end
|
223
|
-
|
224
|
-
# @see AbstractExternalSource#description
|
225
|
-
#
|
226
|
-
def description
|
227
|
-
"from `#{params[:svn]}`".tap do |description|
|
228
|
-
description << ", folder `#{params[:folder]}`" if params[:folder]
|
229
|
-
description << ", tag `#{params[:tag]}`" if params[:tag]
|
230
|
-
description << ", revision `#{params[:revision]}`" if params[:revision]
|
231
|
-
end
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
#-------------------------------------------------------------------------#
|
236
|
-
|
237
|
-
# Provides support for fetching a specification file from a Mercurial
|
238
|
-
# source remote.
|
239
|
-
#
|
240
|
-
# Supports all the options of the downloader (is similar to the git key of
|
241
|
-
# `source` attribute of a specification).
|
242
|
-
#
|
243
|
-
# @note The podspec must be in the root of the repository and should have a
|
244
|
-
# name matching the one of the dependency.
|
245
|
-
#
|
246
|
-
class MercurialSource < AbstractExternalSource
|
247
|
-
|
248
|
-
# @see AbstractExternalSource#fetch
|
249
|
-
#
|
250
|
-
def fetch(sandbox)
|
251
|
-
pre_download(sandbox)
|
252
|
-
end
|
253
|
-
|
254
|
-
# @see AbstractExternalSource#description
|
255
|
-
#
|
256
|
-
def description
|
257
|
-
"from `#{params[:hg]}`".tap do |description|
|
258
|
-
description << ", revision `#{params[:revision]}`" if params[:revision]
|
259
|
-
end
|
260
|
-
end
|
261
|
-
end
|
262
|
-
|
263
|
-
#-------------------------------------------------------------------------#
|
264
|
-
|
265
|
-
# Provides support for fetching a specification file from a Bazaar
|
266
|
-
# source remote.
|
267
|
-
#
|
268
|
-
# Supports all the options of the downloader (is similar to the git key of
|
269
|
-
# `source` attribute of a specification).
|
270
|
-
#
|
271
|
-
# @note The podspec must be in the root of the repository and should have a
|
272
|
-
# name matching the one of the dependency.
|
29
|
+
# @return [Class]
|
273
30
|
#
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
"from `#{params[:bzr]}`".tap do |description|
|
286
|
-
description << ", tag `#{params[:tag]}`" if params[:tag]
|
287
|
-
description << ", revision `#{params[:revision]}`" if params[:revision]
|
288
|
-
end
|
31
|
+
def self.concrete_class_from_params(params)
|
32
|
+
if params.key?(:podspec)
|
33
|
+
PodspecSource
|
34
|
+
elsif params.key?(:path)
|
35
|
+
PathSource
|
36
|
+
elsif params.key?(:local)
|
37
|
+
UI.warn "The `:local` option of the Podfile has been " \
|
38
|
+
"renamed to `:path` and it is deprecated."
|
39
|
+
PathSource
|
40
|
+
elsif Downloader.strategy_from_options(params)
|
41
|
+
DownloaderSource
|
289
42
|
end
|
290
43
|
end
|
291
|
-
|
292
|
-
#-------------------------------------------------------------------------#
|
293
|
-
|
294
|
-
# Provides support for fetching a specification file from an URL. Can be
|
295
|
-
# http, file, etc.
|
296
|
-
#
|
297
|
-
class PodspecSource < AbstractExternalSource
|
298
|
-
|
299
|
-
# @see AbstractExternalSource#fetch
|
300
|
-
#
|
301
|
-
def fetch(sandbox)
|
302
|
-
UI.titled_section("Fetching podspec for `#{name}` #{description}", { :verbose_prefix => "-> " }) do
|
303
|
-
|
304
|
-
require 'open-uri'
|
305
|
-
open(podspec_uri) { |io| store_podspec(sandbox, io.read) }
|
306
|
-
end
|
307
|
-
end
|
308
|
-
|
309
|
-
# @see AbstractExternalSource#description
|
310
|
-
#
|
311
|
-
def description
|
312
|
-
"from `#{params[:podspec]}`"
|
313
|
-
end
|
314
|
-
|
315
|
-
#--------------------------------------#
|
316
|
-
|
317
|
-
private
|
318
|
-
|
319
|
-
# @!group Helpers
|
320
|
-
|
321
|
-
# @return [String] The uri of the podspec appending the name of the file
|
322
|
-
# and expanding it if necessary.
|
323
|
-
#
|
324
|
-
# @note If the declared path is expanded only if the represents a path
|
325
|
-
# relative to the file system.
|
326
|
-
#
|
327
|
-
def podspec_uri
|
328
|
-
declared_path = params[:podspec].to_s
|
329
|
-
if declared_path.match(%r{^.+://})
|
330
|
-
declared_path
|
331
|
-
else
|
332
|
-
path_with_ext = File.extname(declared_path) == '.podspec' ? declared_path : "#{declared_path}/#{name}.podspec"
|
333
|
-
podfile_dir = File.dirname(podfile_path || '')
|
334
|
-
absolute_path = File.expand_path(path_with_ext, podfile_dir)
|
335
|
-
absolute_path
|
336
|
-
end
|
337
|
-
end
|
338
|
-
end
|
339
|
-
|
340
|
-
#-------------------------------------------------------------------------#
|
341
|
-
|
342
|
-
# Provides support for fetching a specification file from a path local to
|
343
|
-
# the machine running the installation.
|
344
|
-
#
|
345
|
-
# Works with the {LocalPod::LocalSourcedPod} class.
|
346
|
-
#
|
347
|
-
class PathSource < AbstractExternalSource
|
348
|
-
|
349
|
-
# @see AbstractExternalSource#fetch
|
350
|
-
#
|
351
|
-
def fetch(sandbox)
|
352
|
-
UI.titled_section("Fetching podspec for `#{name}` #{description}", { :verbose_prefix => "-> " }) do
|
353
|
-
podspec = podspec_path
|
354
|
-
store_podspec(sandbox, podspec)
|
355
|
-
sandbox.store_local_path(name, podspec.dirname)
|
356
|
-
end
|
357
|
-
end
|
358
|
-
|
359
|
-
# @see AbstractExternalSource#description
|
360
|
-
#
|
361
|
-
def description
|
362
|
-
"from `#{params[:path] || params[:local]}`"
|
363
|
-
end
|
364
|
-
|
365
|
-
#--------------------------------------#
|
366
|
-
|
367
|
-
private
|
368
|
-
|
369
|
-
# @!group Helpers
|
370
|
-
|
371
|
-
# @return [Pathname] the path of the podspec.
|
372
|
-
#
|
373
|
-
def podspec_path
|
374
|
-
declared_path = (params[:path] || params[:local]).to_s
|
375
|
-
path_with_ext = File.extname(declared_path) == '.podspec' ? declared_path : "#{declared_path}/#{name}.podspec"
|
376
|
-
podfile_dir = File.dirname(podfile_path || '')
|
377
|
-
absolute_path = File.expand_path(path_with_ext, podfile_dir)
|
378
|
-
pathname = Pathname.new(absolute_path)
|
379
|
-
|
380
|
-
unless pathname.exist?
|
381
|
-
raise Informative, "No podspec found for `#{name}` in `#{declared_path}`"
|
382
|
-
end
|
383
|
-
pathname
|
384
|
-
end
|
385
|
-
end
|
386
|
-
|
387
|
-
#-------------------------------------------------------------------------#
|
388
|
-
|
389
44
|
end
|
390
45
|
end
|