Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
C
cocoapods
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gengmeiios
cocoapods
Commits
e2380478
Commit
e2380478
authored
Apr 15, 2014
by
Fabio Pelosin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ExternalSources] Refactor
parent
36fefd7b
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
38 additions
and
117 deletions
+38
-117
CHANGELOG.md
CHANGELOG.md
+4
-0
Gemfile.lock
Gemfile.lock
+2
-2
external_sources.rb
lib/cocoapods/external_sources.rb
+29
-112
external_sources_spec.rb
spec/unit/external_sources_spec.rb
+0
-0
analyzer_spec.rb
spec/unit/installer/analyzer_spec.rb
+3
-3
No files found.
CHANGELOG.md
View file @
e2380478
...
...
@@ -43,6 +43,10 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
[
Andrea Mazzini
](
https://github.com/andreamazz
)
[
#2008
](
https://github.com/CocoaPods/CocoaPods/issues/2008
)
*
Dependencies declared with external sources now support HTTP downloads and
have improved support for all the options supported by the downloader.
[
Fabio Pelosin
][
irrationalfab
]
##### Bug Fixes
*
Support HTTP redirects when linting homepage and screenshots.
...
...
Gemfile.lock
View file @
e2380478
...
...
@@ -7,7 +7,7 @@ GIT
GIT
remote: https://github.com/CocoaPods/Core.git
revision:
f8a920b02c19273f689c1f930af580d473c7852f
revision:
46411b865c33a0f7fc172be70559611e2f7fbe21
branch: master
specs:
cocoapods-core (0.31.1)
...
...
@@ -27,7 +27,7 @@ GIT
GIT
remote: https://github.com/CocoaPods/cocoapods-downloader.git
revision:
d1cca92979882fe7dfef27001705ed4b9bc43faa
revision:
a66c45ed7118540a2ff98ff30e916f9652d9eea3
branch: master
specs:
cocoapods-downloader (0.4.1)
...
...
lib/cocoapods/external_sources.rb
View file @
e2380478
...
...
@@ -13,20 +13,7 @@ module Pod
name
=
dependency
.
root_name
params
=
dependency
.
external_source
klass
=
if
params
.
key?
(
:git
)
then
GitSource
elsif
params
.
key?
(
:svn
)
then
SvnSource
elsif
params
.
key?
(
:hg
)
then
MercurialSource
elsif
params
.
key?
(
:bzr
)
then
BazaarSource
elsif
params
.
key?
(
:podspec
)
then
PodspecSource
elsif
params
.
key?
(
:path
)
then
PathSource
end
if
params
.
key?
(
:local
)
klass
=
PathSource
UI
.
warn
"The `:local` option of the Podfile has been renamed to `:path` and is deprecated."
\
end
if
klass
if
klass
=
concrete_class_from_params
(
params
)
klass
.
new
(
name
,
params
,
podfile_path
)
else
msg
=
"Unknown external source parameters for `
#{
name
}
`: `
#{
params
}
`"
...
...
@@ -34,6 +21,22 @@ module Pod
end
end
# @return [Class]
#
def
self
.
concrete_class_from_params
(
params
)
if
params
.
key?
(
:podspec
)
PodspecSource
elsif
params
.
key?
(
:path
)
PathSource
elsif
params
.
key?
(
:local
)
UI
.
warn
"The `:local` option of the Podfile has been "
\
"renamed to `:path` and it is deprecated."
PathSource
elsif
Downloader
.
strategy_from_options
(
params
)
DownloaderSource
end
end
#-------------------------------------------------------------------------#
# Abstract class that defines the common behaviour of external sources.
...
...
@@ -134,7 +137,8 @@ module Pod
# @return [void]
#
def
pre_download
(
sandbox
)
UI
.
titled_section
(
"Pre-downloading: `
#{
name
}
`
#{
description
}
"
,
{
:verbose_prefix
=>
"-> "
})
do
title
=
"Pre-downloading: `
#{
name
}
`
#{
description
}
"
UI
.
titled_section
(
title
,
{
:verbose_prefix
=>
"-> "
})
do
target
=
sandbox
.
root
+
name
target
.
rmtree
if
target
.
exist?
downloader
=
Config
.
instance
.
downloader
(
target
,
params
)
...
...
@@ -175,15 +179,13 @@ module Pod
#-------------------------------------------------------------------------#
# Provides support for fetching a specification file from a Git remote.
#
# Supports all the options of the downloader (is similar to the git key of
# `source` attribute of a specification).
# Provides support for fetching a specification file from a source handled
# by the downloader. Supports all the options of the downloader
#
# @note The podspec must be in the root of the repository and should have a
# name matching the one of the dependency.
#
class
Git
Source
<
AbstractExternalSource
class
Downloader
Source
<
AbstractExternalSource
# @see AbstractExternalSource#fetch
#
...
...
@@ -194,98 +196,14 @@ module Pod
# @see AbstractExternalSource#description
#
def
description
"from `
#{
params
[
:git
]
}
`"
.
tap
do
|
description
|
description
<<
", commit `
#{
params
[
:commit
]
}
`"
if
params
[
:commit
]
description
<<
", branch `
#{
params
[
:branch
]
}
`"
if
params
[
:branch
]
description
<<
", tag `
#{
params
[
:tag
]
}
`"
if
params
[
:tag
]
end
end
end
#-------------------------------------------------------------------------#
# Provides support for fetching a specification file from a SVN source
# remote.
#
# Supports all the options of the downloader (is similar to the git key of
# `source` attribute of a specification).
#
# @note The podspec must be in the root of the repository and should have a
# name matching the one of the dependency.
#
class
SvnSource
<
AbstractExternalSource
# @see AbstractExternalSource#fetch
#
def
fetch
(
sandbox
)
pre_download
(
sandbox
)
end
# @see AbstractExternalSource#description
#
def
description
"from `
#{
params
[
:svn
]
}
`"
.
tap
do
|
description
|
description
<<
", folder `
#{
params
[
:folder
]
}
`"
if
params
[
:folder
]
description
<<
", tag `
#{
params
[
:tag
]
}
`"
if
params
[
:tag
]
description
<<
", revision `
#{
params
[
:revision
]
}
`"
if
params
[
:revision
]
end
end
end
#-------------------------------------------------------------------------#
# Provides support for fetching a specification file from a Mercurial
# source remote.
#
# Supports all the options of the downloader (is similar to the git key of
# `source` attribute of a specification).
#
# @note The podspec must be in the root of the repository and should have a
# name matching the one of the dependency.
#
class
MercurialSource
<
AbstractExternalSource
# @see AbstractExternalSource#fetch
#
def
fetch
(
sandbox
)
pre_download
(
sandbox
)
end
# @see AbstractExternalSource#description
#
def
description
"from `
#{
params
[
:hg
]
}
`"
.
tap
do
|
description
|
description
<<
", revision `
#{
params
[
:revision
]
}
`"
if
params
[
:revision
]
end
end
end
#-------------------------------------------------------------------------#
# Provides support for fetching a specification file from a Bazaar
# source remote.
#
# Supports all the options of the downloader (is similar to the git key of
# `source` attribute of a specification).
#
# @note The podspec must be in the root of the repository and should have a
# name matching the one of the dependency.
#
class
BazaarSource
<
AbstractExternalSource
# @see AbstractExternalSource#fetch
#
def
fetch
(
sandbox
)
pre_download
(
sandbox
)
end
# @see AbstractExternalSource#description
#
def
description
"from `
#{
params
[
:bzr
]
}
`"
.
tap
do
|
description
|
description
<<
", tag `
#{
params
[
:tag
]
}
`"
if
params
[
:tag
]
description
<<
", revision `
#{
params
[
:revision
]
}
`"
if
params
[
:revision
]
strategy
=
Downloader
.
strategy_from_options
(
params
)
options
=
params
.
dup
url
=
options
.
delete
(
strategy
)
result
=
"from `
#{
url
}
`"
options
.
each
do
|
key
,
value
|
result
<<
",
#{
key
}
`
#{
value
}
`"
end
result
end
end
...
...
@@ -300,7 +218,6 @@ module Pod
#
def
fetch
(
sandbox
)
UI
.
titled_section
(
"Fetching podspec for `
#{
name
}
`
#{
description
}
"
,
{
:verbose_prefix
=>
"-> "
})
do
require
'open-uri'
open
(
podspec_uri
)
{
|
io
|
store_podspec
(
sandbox
,
io
.
read
)
}
end
...
...
spec/unit/external_sources_spec.rb
View file @
e2380478
This diff is collapsed.
Click to expand it.
spec/unit/installer/analyzer_spec.rb
View file @
e2380478
...
...
@@ -129,19 +129,19 @@ module Pod
podfile_state
.
added
<<
"BananaLib"
@analyzer
.
stubs
(
:result
).
returns
(
stub
(
:podfile_state
=>
podfile_state
))
@podfile
.
stubs
(
:dependencies
).
returns
([
Dependency
.
new
(
'BananaLib'
,
:git
=>
"example.com"
)])
ExternalSources
::
Git
Source
.
any_instance
.
expects
(
:fetch
)
ExternalSources
::
Downloader
Source
.
any_instance
.
expects
(
:fetch
)
@analyzer
.
send
(
:fetch_external_sources
)
end
xit
"it fetches the specification from either the sandbox or from the remote be default"
do
dependency
=
Dependency
.
new
(
'Name'
,
:git
=>
'www.example.com'
)
ExternalSources
::
Git
Source
.
any_instance
.
expects
(
:specification_from_external
).
returns
(
Specification
.
new
).
once
ExternalSources
::
Downloader
Source
.
any_instance
.
expects
(
:specification_from_external
).
returns
(
Specification
.
new
).
once
@resolver
.
send
(
:set_from_external_source
,
dependency
)
end
xit
"it fetches the specification from the remote if in update mode"
do
dependency
=
Dependency
.
new
(
'Name'
,
:git
=>
'www.example.com'
)
ExternalSources
::
Git
Source
.
any_instance
.
expects
(
:specification
).
returns
(
Specification
.
new
).
once
ExternalSources
::
Downloader
Source
.
any_instance
.
expects
(
:specification
).
returns
(
Specification
.
new
).
once
@resolver
.
update_external_specs
=
false
@resolver
.
send
(
:set_from_external_source
,
dependency
)
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment