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
a92c46a7
Commit
a92c46a7
authored
Oct 19, 2014
by
Samuel E. Giddins
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Analyzer][Resolver] Implement more complete dependency locking
Tis should now behave more like Bundler
parent
39e51480
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
114 additions
and
66 deletions
+114
-66
analyzer.rb
lib/cocoapods/installer/analyzer.rb
+39
-23
resolver.rb
lib/cocoapods/resolver.rb
+1
-4
sandbox.rb
lib/cocoapods/sandbox.rb
+2
-1
analyzer_spec.rb
spec/unit/installer/analyzer_spec.rb
+29
-7
resolver_spec.rb
spec/unit/resolver_spec.rb
+43
-31
No files found.
lib/cocoapods/installer/analyzer.rb
View file @
a92c46a7
...
@@ -149,17 +149,13 @@ module Pod
...
@@ -149,17 +149,13 @@ module Pod
pods_state
=
nil
pods_state
=
nil
UI
.
section
'Finding Podfile changes'
do
UI
.
section
'Finding Podfile changes'
do
pods_by_state
=
lockfile
.
detect_changes_with_podfile
(
podfile
)
pods_by_state
=
lockfile
.
detect_changes_with_podfile
(
podfile
)
pods_by_state
.
dup
.
each
do
|
state
,
full_names
|
pods
=
full_names
.
map
{
|
fn
|
Specification
.
root_name
(
fn
)
}.
uniq
pods_by_state
[
state
]
=
pods
end
pods_state
=
SpecsState
.
new
(
pods_by_state
)
pods_state
=
SpecsState
.
new
(
pods_by_state
)
pods_state
.
print
pods_state
.
print
end
end
pods_state
pods_state
else
else
state
=
SpecsState
.
new
state
=
SpecsState
.
new
state
.
added
.
concat
(
podfile
.
dependencies
.
map
(
&
:
root_
name
).
uniq
)
state
.
added
.
concat
(
podfile
.
dependencies
.
map
(
&
:name
).
uniq
)
state
state
end
end
end
end
...
@@ -231,22 +227,45 @@ module Pod
...
@@ -231,22 +227,45 @@ module Pod
# is in update mode, to prevent it from upgrading the Pods that weren't
# is in update mode, to prevent it from upgrading the Pods that weren't
# changed in the {Podfile}.
# changed in the {Podfile}.
#
#
# @return [Array<Dependency>] the dependencies generate by the lockfile
# @return [Molinillo::DependencyGraph<Dependency>] the dependencies
# that prevent the resolver to update a Pod.
# generated by the lockfile that prevent the resolver to update
# a Pod.
#
#
def
generate_version_locking_dependencies
def
generate_version_locking_dependencies
if
update_mode
==
:all
require
'molinillo/dependency_graph'
[]
dependency_graph
=
Molinillo
::
DependencyGraph
.
new
else
unless
update_mode
==
:all
||
!
lockfile
locking_pods
=
result
.
podfile_state
.
unchanged
explicit_dependencies
=
lockfile
.
to_hash
[
'DEPENDENCIES'
]
||
[]
explicit_dependencies
.
each
do
|
string
|
dependency
=
Dependency
.
new
(
string
)
dependency_graph
.
add_root_vertex
(
dependency
.
name
,
nil
)
end
add_to_dependency_graph
=
lambda
do
|
object
,
parents
|
case
object
when
String
dependency
=
Dependency
.
from_string
(
object
)
dependency_graph
.
add_child_vertex
(
dependency
.
name
,
parents
.
empty?
?
dependency
:
nil
,
parents
,
nil
)
when
Hash
object
.
each
do
|
key
,
value
|
dependency
=
Dependency
.
from_string
(
key
)
dependency_graph
.
add_child_vertex
(
dependency
.
name
,
parents
.
empty?
?
dependency
:
nil
,
parents
,
nil
)
value
.
each
{
|
v
|
add_to_dependency_graph
.
call
(
v
,
[
dependency
.
name
])
}
end
end
end
pods
=
lockfile
.
to_hash
[
'PODS'
]
||
[]
pods
.
each
do
|
p
|
add_to_dependency_graph
.
call
(
p
,
[])
end
pods_to_update
=
result
.
podfile_state
.
changed
+
result
.
podfile_state
.
deleted
if
update_mode
==
:selected
if
update_mode
==
:selected
# If selected Pods should been updated, filter them out of the list
# If selected Pods should been updated, filter them out of the list
locking_pods
=
locking_pods
.
reject
{
|
pod
|
update
[
:pods
].
include?
(
pod
)
}
pods_to_update
+=
update
[
:pods
]
end
end
locking_pods
.
map
do
|
pod
|
pods_to_update
.
each
{
|
u
|
dependency_graph
.
detach_vertex_named
(
u
)
}
lockfile
.
dependencies_to_lock_pod_named
(
pod
)
end
.
flatten
end
end
dependency_graph
end
end
# Fetches the podspecs of external sources if modifications to the
# Fetches the podspecs of external sources if modifications to the
...
@@ -281,9 +300,9 @@ module Pod
...
@@ -281,9 +300,9 @@ module Pod
if
update_mode
==
:selected
if
update_mode
==
:selected
pods_to_fetch
+=
update
[
:pods
]
pods_to_fetch
+=
update
[
:pods
]
end
end
deps_to_fetch
=
deps_with_external_source
.
select
{
|
dep
|
pods_to_fetch
.
include?
(
dep
.
root_
name
)
}
deps_to_fetch
=
deps_with_external_source
.
select
{
|
dep
|
pods_to_fetch
.
include?
(
dep
.
name
)
}
deps_to_fetch_if_needed
=
deps_with_external_source
.
select
{
|
dep
|
result
.
podfile_state
.
unchanged
.
include?
(
dep
.
root_
name
)
}
deps_to_fetch_if_needed
=
deps_with_external_source
.
select
{
|
dep
|
result
.
podfile_state
.
unchanged
.
include?
(
dep
.
name
)
}
deps_to_fetch
+=
deps_to_fetch_if_needed
.
select
{
|
dep
|
sandbox
.
specification
(
dep
.
root_name
).
nil?
||
!
dep
.
external_source
[
:local
].
nil?
||
!
dep
.
external_source
[
:path
].
nil?
||
!
sandbox
.
pod_dir
(
dep
.
root_
name
).
directory?
}
deps_to_fetch
+=
deps_to_fetch_if_needed
.
select
{
|
dep
|
sandbox
.
specification
(
dep
.
name
).
nil?
||
!
dep
.
external_source
[
:local
].
nil?
||
!
dep
.
external_source
[
:path
].
nil?
||
!
sandbox
.
pod_dir
(
dep
.
name
).
directory?
}
end
end
unless
deps_to_fetch
.
empty?
unless
deps_to_fetch
.
empty?
...
@@ -352,7 +371,7 @@ module Pod
...
@@ -352,7 +371,7 @@ module Pod
# @!group Analysis internal products
# @!group Analysis internal products
# @return [
Array<Dependency>] the dependencies generate
by the lockfile
# @return [
Molinillo::DependencyGraph<Dependency>] the dependencies generated
by the lockfile
# that prevent the resolver to update a Pod.
# that prevent the resolver to update a Pod.
#
#
attr_reader
:locked_dependencies
attr_reader
:locked_dependencies
...
@@ -604,7 +623,7 @@ module Pod
...
@@ -604,7 +623,7 @@ module Pod
#
#
class
SpecsState
class
SpecsState
# @param [Hash{Symbol=>String}] pods_by_state
# @param [Hash{Symbol=>String}] pods_by_state
# The
**root**
name of the pods grouped by their state
# The name of the pods grouped by their state
# (`:added`, `:removed`, `:changed` or `:unchanged`).
# (`:added`, `:removed`, `:changed` or `:unchanged`).
#
#
def
initialize
(
pods_by_state
=
nil
)
def
initialize
(
pods_by_state
=
nil
)
...
@@ -656,12 +675,9 @@ module Pod
...
@@ -656,12 +675,9 @@ module Pod
# @param [Symbol]
# @param [Symbol]
# the state of the Pod.
# the state of the Pod.
#
#
# @raise If there is an attempt to add the name of a subspec.
#
# @return [void]
# @return [void]
#
#
def
add_name
(
name
,
state
)
def
add_name
(
name
,
state
)
raise
'[Bug] Attempt to add subspec to the pods state'
if
name
.
include?
(
'/'
)
send
(
state
)
<<
name
send
(
state
)
<<
name
end
end
end
end
...
...
lib/cocoapods/resolver.rb
View file @
a92c46a7
...
@@ -51,11 +51,8 @@ module Pod
...
@@ -51,11 +51,8 @@ module Pod
#
#
def
resolve
def
resolve
dependencies
=
@podfile
.
target_definition_list
.
map
(
&
:dependencies
).
flatten
dependencies
=
@podfile
.
target_definition_list
.
map
(
&
:dependencies
).
flatten
base
=
locked_dependencies
.
reduce
(
Molinillo
::
DependencyGraph
.
new
)
do
|
graph
,
locked
|
graph
.
tap
{
|
g
|
g
.
add_root_vertex
(
locked
.
name
,
locked
)
}
end
@cached_sets
=
{}
@cached_sets
=
{}
@activated
=
Molinillo
::
Resolver
.
new
(
self
,
self
).
resolve
(
dependencies
,
base
)
@activated
=
Molinillo
::
Resolver
.
new
(
self
,
self
).
resolve
(
dependencies
,
locked_dependencies
)
specs_by_target
specs_by_target
rescue
Molinillo
::
ResolverError
=>
e
rescue
Molinillo
::
ResolverError
=>
e
raise
Informative
,
e
.
message
raise
Informative
,
e
.
message
...
...
lib/cocoapods/sandbox.rb
View file @
a92c46a7
...
@@ -219,6 +219,7 @@ module Pod
...
@@ -219,6 +219,7 @@ module Pod
# @return [Nil] if the podspec is not stored.
# @return [Nil] if the podspec is not stored.
#
#
def
specification_path
(
name
)
def
specification_path
(
name
)
name
=
Specification
.
root_name
(
name
)
path
=
specifications_root
+
"
#{
name
}
.podspec"
path
=
specifications_root
+
"
#{
name
}
.podspec"
if
path
.
exist?
if
path
.
exist?
path
path
...
@@ -378,7 +379,7 @@ module Pod
...
@@ -378,7 +379,7 @@ module Pod
end
end
# @return [Hash{String=>String}] The path of the Pods with a local source
# @return [Hash{String=>String}] The path of the Pods with a local source
# grouped by their name.
# grouped by their
root
name.
#
#
# @todo Rename (e.g. `pods_with_local_path`)
# @todo Rename (e.g. `pods_with_local_path`)
#
#
...
...
spec/unit/installer/analyzer_spec.rb
View file @
a92c46a7
...
@@ -13,7 +13,7 @@ def create_analyzer
...
@@ -13,7 +13,7 @@ def create_analyzer
end
end
hash
=
{}
hash
=
{}
hash
[
'PODS'
]
=
[
'JSONKit (1.
4
)'
,
'NUI (0.2.0)'
,
'SVPullToRefresh (0.4)'
]
hash
[
'PODS'
]
=
[
'JSONKit (1.
5pre
)'
,
'NUI (0.2.0)'
,
'SVPullToRefresh (0.4)'
]
hash
[
'DEPENDENCIES'
]
=
%w(JSONKit NUI SVPullToRefresh)
hash
[
'DEPENDENCIES'
]
=
%w(JSONKit NUI SVPullToRefresh)
hash
[
'SPEC CHECKSUMS'
]
=
{}
hash
[
'SPEC CHECKSUMS'
]
=
{}
hash
[
'COCOAPODS'
]
=
Pod
::
VERSION
hash
[
'COCOAPODS'
]
=
Pod
::
VERSION
...
@@ -52,10 +52,10 @@ module Pod
...
@@ -52,10 +52,10 @@ module Pod
it
'computes the state of the Podfile respect to the Lockfile'
do
it
'computes the state of the Podfile respect to the Lockfile'
do
state
=
@analyzer
.
analyze
.
podfile_state
state
=
@analyzer
.
analyze
.
podfile_state
state
.
added
.
should
==
%w(AFNetworking libextobjc)
state
.
added
.
should
==
%w(AFNetworking libextobjc
/EXTKeyPathCoding
)
state
.
changed
.
should
==
[
'JSONKit'
]
state
.
changed
.
should
==
%w()
state
.
unchanged
.
should
==
[
'SVPullToRefresh'
]
state
.
unchanged
.
should
==
%w(JSONKit SVPullToRefresh)
state
.
deleted
.
should
==
[
'NUI'
]
state
.
deleted
.
should
==
%w(NUI)
end
end
#--------------------------------------#
#--------------------------------------#
...
@@ -131,13 +131,35 @@ module Pod
...
@@ -131,13 +131,35 @@ module Pod
it
'locks the version of the dependencies which did not change in the Podfile'
do
it
'locks the version of the dependencies which did not change in the Podfile'
do
@analyzer
.
analyze
@analyzer
.
analyze
@analyzer
.
send
(
:locked_dependencies
).
map
(
&
:to_s
).
should
==
[
'SVPullToRefresh (= 0.4)'
]
@analyzer
.
send
(
:locked_dependencies
).
map
(
&
:payload
).
map
(
&
:to_s
).
should
==
[
'JSONKit (= 1.5pre)'
,
'SVPullToRefresh (= 0.4)'
]
end
end
it
'does not lock the dependencies in update mode'
do
it
'does not lock the dependencies in update mode'
do
@analyzer
.
update
=
true
@analyzer
.
update
=
true
@analyzer
.
analyze
@analyzer
.
analyze
@analyzer
.
send
(
:locked_dependencies
).
map
(
&
:to_s
).
should
==
[]
@analyzer
.
send
(
:locked_dependencies
).
to_a
.
map
(
&
:payload
).
should
==
[]
end
#--------------------------------------#
it
'takes into account locked implicit dependencies'
do
podfile
=
Podfile
.
new
do
platform
:ios
,
'8.0'
xcodeproj
'SampleProject/SampleProject'
pod
'ARAnalytics/Mixpanel'
end
hash
=
{}
hash
[
'PODS'
]
=
[
'ARAnalytics/CoreIOS (2.8.0)'
,
{
'ARAnalytics/Mixpanel (2.8.0)'
=>
[
'ARAnlytics/CoreIOS'
,
'Mixpanel'
]},
'Mixpanel (2.5.1)'
]
hash
[
'DEPENDENCIES'
]
=
%w(ARAnalytics/Mixpanel)
hash
[
'SPEC CHECKSUMS'
]
=
{}
hash
[
'COCOAPODS'
]
=
Pod
::
VERSION
lockfile
=
Pod
::
Lockfile
.
new
(
hash
)
analyzer
=
Installer
::
Analyzer
.
new
(
config
.
sandbox
,
podfile
,
lockfile
)
analyzer
.
analyze
.
specifications
.
find
{
|
s
|
s
.
name
==
'Mixpanel'
}.
version
.
to_s
.
should
==
'2.5.1'
end
end
#--------------------------------------#
#--------------------------------------#
...
...
spec/unit/resolver_spec.rb
View file @
a92c46a7
require
File
.
expand_path
(
'../../spec_helper'
,
__FILE__
)
require
File
.
expand_path
(
'../../spec_helper'
,
__FILE__
)
def
dependency_graph_from_array
(
locked_dependencies
)
locked_dependencies
.
reduce
(
Molinillo
::
DependencyGraph
.
new
)
do
|
graph
,
dep
|
graph
.
add_root_vertex
(
dep
.
name
,
dep
)
graph
end
end
def
empty_graph
Molinillo
::
DependencyGraph
.
new
end
module
Pod
module
Pod
describe
Resolver
do
describe
Resolver
do
describe
'In general'
do
describe
'In general'
do
...
@@ -8,7 +19,7 @@ module Pod
...
@@ -8,7 +19,7 @@ module Pod
platform
:ios
platform
:ios
pod
'BlocksKit'
,
'1.5.2'
pod
'BlocksKit'
,
'1.5.2'
end
end
locked_deps
=
[
Dependency
.
new
(
'BlocksKit'
,
'1.5.2'
)]
locked_deps
=
dependency_graph_from_array
([
Dependency
.
new
(
'BlocksKit'
,
'1.5.2'
)])
@resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
locked_deps
,
SourcesManager
.
all
)
@resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
locked_deps
,
SourcesManager
.
all
)
end
end
...
@@ -21,7 +32,8 @@ module Pod
...
@@ -21,7 +32,8 @@ module Pod
end
end
it
'returns the locked dependencies'
do
it
'returns the locked dependencies'
do
@resolver
.
locked_dependencies
.
should
==
[
Dependency
.
new
(
'BlocksKit'
,
'1.5.2'
)]
@resolver
.
locked_dependencies
.
should
==
dependency_graph_from_array
([
Dependency
.
new
(
'BlocksKit'
,
'1.5.2'
)])
end
end
#--------------------------------------#
#--------------------------------------#
...
@@ -55,7 +67,7 @@ module Pod
...
@@ -55,7 +67,7 @@ module Pod
platform
:ios
platform
:ios
pod
'Reachability'
,
:podspec
=>
podspec
pod
'Reachability'
,
:podspec
=>
podspec
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
empty_graph
,
SourcesManager
.
all
)
resolver
.
resolve
resolver
.
resolve
specs
=
resolver
.
specs_by_target
.
values
.
flatten
specs
=
resolver
.
specs_by_target
.
values
.
flatten
specs
.
map
(
&
:to_s
).
should
==
[
'Reachability (3.0.0)'
]
specs
.
map
(
&
:to_s
).
should
==
[
'Reachability (3.0.0)'
]
...
@@ -65,7 +77,7 @@ module Pod
...
@@ -65,7 +77,7 @@ module Pod
@podfile
=
Podfile
.
new
do
@podfile
=
Podfile
.
new
do
platform
:ios
platform
:ios
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
==
[]
specs
.
should
==
[]
end
end
...
@@ -79,7 +91,7 @@ module Pod
...
@@ -79,7 +91,7 @@ module Pod
platform
:ios
,
'6.0'
platform
:ios
,
'6.0'
pod
'BlocksKit'
,
'1.5.2'
pod
'BlocksKit'
,
'1.5.2'
end
end
@resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
@resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
end
end
it
'cross resolves dependencies'
do
it
'cross resolves dependencies'
do
...
@@ -89,7 +101,7 @@ module Pod
...
@@ -89,7 +101,7 @@ module Pod
pod
'AFQuickLookView'
,
'= 0.1.0'
# requires 'AFNetworking', '>= 0.9.0'
pod
'AFQuickLookView'
,
'= 0.1.0'
# requires 'AFNetworking', '>= 0.9.0'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
==
[
'AFNetworking (0.9.1)'
,
'AFQuickLookView (0.1.0)'
]
specs
.
should
==
[
'AFNetworking (0.9.1)'
,
'AFQuickLookView (0.1.0)'
]
end
end
...
@@ -101,7 +113,7 @@ module Pod
...
@@ -101,7 +113,7 @@ module Pod
pod
'AFNetworking'
,
'~> 1.2.0'
pod
'AFNetworking'
,
'~> 1.2.0'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
==
[
'AFNetworking (1.2.1)'
,
'RestKit (0.20.1)'
,
specs
.
should
==
[
'AFNetworking (1.2.1)'
,
'RestKit (0.20.1)'
,
'RestKit/Core (0.20.1)'
,
'RestKit/CoreData (0.20.1)'
,
'RestKit/Core (0.20.1)'
,
'RestKit/CoreData (0.20.1)'
,
...
@@ -117,10 +129,10 @@ module Pod
...
@@ -117,10 +129,10 @@ module Pod
pod
'AFOAuth2Client'
# latest version (0.1.2) requires 'AFNetworking', '~> 1.3'
pod
'AFOAuth2Client'
# latest version (0.1.2) requires 'AFNetworking', '~> 1.3'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
==
[
'AFAmazonS3Client (1.0.1)'
,
'AFNetworking (1.3.4)'
,
specs
.
should
==
[
'AFAmazonS3Client (1.0.1)'
,
'AFNetworking (1.3.4)'
,
'AFOAuth2Client (0.1.2)'
,
'CargoBay (1.0.0)'
]
'AFOAuth2Client (0.1.2)'
,
'CargoBay (1.0.0)'
]
end
end
it
'uses a Podfile requirement even when a previously declared '
\
it
'uses a Podfile requirement even when a previously declared '
\
...
@@ -131,7 +143,7 @@ module Pod
...
@@ -131,7 +143,7 @@ module Pod
pod
'AFNetworking'
,
'2.0.1'
pod
'AFNetworking'
,
'2.0.1'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:root
).
map
(
&
:to_s
).
uniq
.
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:root
).
map
(
&
:to_s
).
uniq
.
sort
specs
.
should
==
[
'AFNetworking (2.0.1)'
,
'InstagramKit (3.5.0)'
]
specs
.
should
==
[
'AFNetworking (2.0.1)'
,
'InstagramKit (3.5.0)'
]
end
end
...
@@ -170,7 +182,7 @@ module Pod
...
@@ -170,7 +182,7 @@ module Pod
platform
:ios
,
'7.0'
platform
:ios
,
'7.0'
pod
'RestKit'
,
'0.10.3'
pod
'RestKit'
,
'0.10.3'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:name
).
sort
.
should
==
%w(
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:name
).
sort
.
should
==
%w(
FileMD5Hash
FileMD5Hash
ISO8601DateFormatter
ISO8601DateFormatter
...
@@ -198,7 +210,7 @@ module Pod
...
@@ -198,7 +210,7 @@ module Pod
platform
:ios
,
'7.0'
platform
:ios
,
'7.0'
pod
'RestKit'
,
'0.20.0-rc1'
pod
'RestKit'
,
'0.20.0-rc1'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
.
should
==
[
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
.
should
==
[
'AFNetworking (1.1.0)'
,
'AFNetworking (1.1.0)'
,
'RestKit (0.20.0-rc1)'
,
'RestKit (0.20.0-rc1)'
,
...
@@ -227,7 +239,7 @@ module Pod
...
@@ -227,7 +239,7 @@ module Pod
end
end
end
end
config
.
sandbox
.
expects
(
:specification
).
with
(
'MainSpec'
).
returns
(
spec
)
config
.
sandbox
.
expects
(
:specification
).
with
(
'MainSpec'
).
returns
(
spec
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:name
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:name
).
sort
specs
.
should
==
%w(
specs
.
should
==
%w(
MainSpec/FirstSubSpec MainSpec/FirstSubSpec/SecondSubSpec
MainSpec/FirstSubSpec MainSpec/FirstSubSpec/SecondSubSpec
...
@@ -240,7 +252,7 @@ module Pod
...
@@ -240,7 +252,7 @@ module Pod
pod
'FileMD5Hash'
pod
'FileMD5Hash'
pod
'JSONKit'
,
:head
pod
'JSONKit'
,
:head
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
empty_graph
,
SourcesManager
.
all
)
filemd5hash
,
jsonkit
=
resolver
.
resolve
.
values
.
first
.
sort_by
(
&
:name
)
filemd5hash
,
jsonkit
=
resolver
.
resolve
.
values
.
first
.
sort_by
(
&
:name
)
filemd5hash
.
version
.
should
.
not
.
be
.
head
filemd5hash
.
version
.
should
.
not
.
be
.
head
jsonkit
.
version
.
should
.
be
.
head
jsonkit
.
version
.
should
.
be
.
head
...
@@ -254,7 +266,7 @@ module Pod
...
@@ -254,7 +266,7 @@ module Pod
pod
'JSONKit'
,
'1.4'
pod
'JSONKit'
,
'1.4'
pod
'JSONKit'
,
'1.5pre'
pod
'JSONKit'
,
'1.5pre'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
empty_graph
,
SourcesManager
.
all
)
e
=
lambda
{
resolver
.
resolve
}.
should
.
raise
Informative
e
=
lambda
{
resolver
.
resolve
}.
should
.
raise
Informative
e
.
message
.
should
.
match
(
/Unable to satisfy the following requirements/
)
e
.
message
.
should
.
match
(
/Unable to satisfy the following requirements/
)
e
.
message
.
should
.
match
(
/`JSONKit \(= 1.4\)` required by `Podfile`/
)
e
.
message
.
should
.
match
(
/`JSONKit \(= 1.4\)` required by `Podfile`/
)
...
@@ -267,7 +279,7 @@ module Pod
...
@@ -267,7 +279,7 @@ module Pod
pod
'RestKit'
,
'0.23.3'
# dependends on AFNetworking ~> 1.3.0
pod
'RestKit'
,
'0.23.3'
# dependends on AFNetworking ~> 1.3.0
pod
'AFNetworking'
,
'> 2'
pod
'AFNetworking'
,
'> 2'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
empty_graph
,
SourcesManager
.
all
)
e
=
lambda
{
resolver
.
resolve
}.
should
.
raise
Informative
e
=
lambda
{
resolver
.
resolve
}.
should
.
raise
Informative
e
.
message
.
should
.
match
(
/Unable to satisfy the following requirements/
)
e
.
message
.
should
.
match
(
/Unable to satisfy the following requirements/
)
e
.
message
.
should
.
match
(
/`AFNetworking \(~> 1.3.0\)` required by `RestKit\/Network \(.*\)`/
)
e
.
message
.
should
.
match
(
/`AFNetworking \(~> 1.3.0\)` required by `RestKit\/Network \(.*\)`/
)
...
@@ -279,7 +291,7 @@ module Pod
...
@@ -279,7 +291,7 @@ module Pod
platform
:ios
platform
:ios
pod
'AFNetworking'
,
'3.0.1'
pod
'AFNetworking'
,
'3.0.1'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
empty_graph
,
SourcesManager
.
all
)
e
=
lambda
{
resolver
.
resolve
}.
should
.
raise
Informative
e
=
lambda
{
resolver
.
resolve
}.
should
.
raise
Informative
e
.
message
.
should
.
match
(
/Unable to satisfy the following requirements/
)
e
.
message
.
should
.
match
(
/Unable to satisfy the following requirements/
)
e
.
message
.
should
.
match
(
/`AFNetworking \(= 3.0.1\)` required by `Podfile`/
)
e
.
message
.
should
.
match
(
/`AFNetworking \(= 3.0.1\)` required by `Podfile`/
)
...
@@ -290,11 +302,11 @@ module Pod
...
@@ -290,11 +302,11 @@ module Pod
platform
:ios
platform
:ios
pod
'JSONKit'
,
'<= 1.5pre'
pod
'JSONKit'
,
'<= 1.5pre'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
empty_graph
,
SourcesManager
.
all
)
version
=
resolver
.
resolve
.
values
.
flatten
.
first
.
version
version
=
resolver
.
resolve
.
values
.
flatten
.
first
.
version
version
.
to_s
.
should
==
'1.5pre'
version
.
to_s
.
should
==
'1.5pre'
locked_deps
=
[
Dependency
.
new
(
'JSONKit'
,
'= 1.4'
)]
locked_deps
=
dependency_graph_from_array
([
Dependency
.
new
(
'JSONKit'
,
'= 1.4'
)])
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
locked_deps
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
locked_deps
,
SourcesManager
.
all
)
version
=
resolver
.
resolve
.
values
.
flatten
.
first
.
version
version
=
resolver
.
resolve
.
values
.
flatten
.
first
.
version
version
.
to_s
.
should
==
'1.4'
version
.
to_s
.
should
==
'1.4'
...
@@ -307,13 +319,13 @@ module Pod
...
@@ -307,13 +319,13 @@ module Pod
end
end
file
=
fixture
(
'spec-repos/test_repo/JSONKit/999.999.999/JSONKit.podspec'
)
file
=
fixture
(
'spec-repos/test_repo/JSONKit/999.999.999/JSONKit.podspec'
)
sources
=
SourcesManager
.
sources
(
%w(master test_repo)
)
sources
=
SourcesManager
.
sources
(
%w(master test_repo)
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
[]
,
sources
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
empty_graph
,
sources
)
spec
=
resolver
.
resolve
.
values
.
flatten
.
first
spec
=
resolver
.
resolve
.
values
.
flatten
.
first
spec
.
version
.
to_s
.
should
==
'999.999.999'
spec
.
version
.
to_s
.
should
==
'999.999.999'
spec
.
defined_in_file
.
should
==
file
spec
.
defined_in_file
.
should
==
file
sources
=
SourcesManager
.
sources
(
%w(test_repo master)
)
sources
=
SourcesManager
.
sources
(
%w(test_repo master)
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
[]
,
sources
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
empty_graph
,
sources
)
spec
=
resolver
.
resolve
.
values
.
flatten
.
first
spec
=
resolver
.
resolve
.
values
.
flatten
.
first
spec
.
version
.
to_s
.
should
==
'999.999.999'
spec
.
version
.
to_s
.
should
==
'999.999.999'
resolver
.
resolve
.
values
.
flatten
.
first
.
defined_in_file
.
should
==
file
resolver
.
resolve
.
values
.
flatten
.
first
.
defined_in_file
.
should
==
file
...
@@ -326,13 +338,13 @@ module Pod
...
@@ -326,13 +338,13 @@ module Pod
pod
'JSONKit'
,
'1.4'
pod
'JSONKit'
,
'1.4'
end
end
sources
=
SourcesManager
.
sources
(
%w(master test_repo)
)
sources
=
SourcesManager
.
sources
(
%w(master test_repo)
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
[]
,
sources
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
empty_graph
,
sources
)
spec
=
resolver
.
resolve
.
values
.
flatten
.
first
spec
=
resolver
.
resolve
.
values
.
flatten
.
first
spec
.
version
.
to_s
.
should
==
'1.4'
spec
.
version
.
to_s
.
should
==
'1.4'
spec
.
defined_in_file
.
should
==
fixture
(
'spec-repos/master/Specs/JSONKit/1.4/JSONKit.podspec.json'
)
spec
.
defined_in_file
.
should
==
fixture
(
'spec-repos/master/Specs/JSONKit/1.4/JSONKit.podspec.json'
)
sources
=
SourcesManager
.
sources
(
%w(test_repo master)
)
sources
=
SourcesManager
.
sources
(
%w(test_repo master)
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
[]
,
sources
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
podfile
,
empty_graph
,
sources
)
spec
=
resolver
.
resolve
.
values
.
flatten
.
first
spec
=
resolver
.
resolve
.
values
.
flatten
.
first
spec
.
version
.
to_s
.
should
==
'1.4'
spec
.
version
.
to_s
.
should
==
'1.4'
resolver
.
resolve
.
values
.
flatten
.
first
.
defined_in_file
.
should
==
fixture
(
'spec-repos/test_repo/JSONKit/1.4/JSONKit.podspec'
)
resolver
.
resolve
.
values
.
flatten
.
first
.
defined_in_file
.
should
==
fixture
(
'spec-repos/test_repo/JSONKit/1.4/JSONKit.podspec'
)
...
@@ -351,7 +363,7 @@ module Pod
...
@@ -351,7 +363,7 @@ module Pod
pod
'AFNetworking'
,
'1.0RC3'
pod
'AFNetworking'
,
'1.0RC3'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
==
[
'AFNetworking (1.0RC3)'
]
specs
.
should
==
[
'AFNetworking (1.0RC3)'
]
end
end
...
@@ -362,7 +374,7 @@ module Pod
...
@@ -362,7 +374,7 @@ module Pod
pod
'AFNetworking'
,
'~> 1.0RC3'
pod
'AFNetworking'
,
'~> 1.0RC3'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
==
[
'AFNetworking (1.3.4)'
]
specs
.
should
==
[
'AFNetworking (1.3.4)'
]
...
@@ -374,7 +386,7 @@ module Pod
...
@@ -374,7 +386,7 @@ module Pod
pod
'AFNetworking'
,
'1.0'
pod
'AFNetworking'
,
'1.0'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
==
[
'AFNetworking (1.0)'
]
specs
.
should
==
[
'AFNetworking (1.0)'
]
...
@@ -386,7 +398,7 @@ module Pod
...
@@ -386,7 +398,7 @@ module Pod
pod
'AFNetworking'
,
'< 1.0'
pod
'AFNetworking'
,
'< 1.0'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
==
[
'AFNetworking (0.10.1)'
]
specs
.
should
==
[
'AFNetworking (0.10.1)'
]
...
@@ -398,7 +410,7 @@ module Pod
...
@@ -398,7 +410,7 @@ module Pod
pod
'AFNetworking'
,
'<= 1.0'
pod
'AFNetworking'
,
'<= 1.0'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
==
[
'AFNetworking (1.0)'
]
specs
.
should
==
[
'AFNetworking (1.0)'
]
...
@@ -410,7 +422,7 @@ module Pod
...
@@ -410,7 +422,7 @@ module Pod
pod
'AFNetworking'
,
'> 1.0'
,
'< 1.3'
pod
'AFNetworking'
,
'> 1.0'
,
'< 1.3'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
==
[
'AFNetworking (1.2.1)'
]
specs
.
should
==
[
'AFNetworking (1.2.1)'
]
...
@@ -422,7 +434,7 @@ module Pod
...
@@ -422,7 +434,7 @@ module Pod
pod
'AFNetworking'
,
'>= 1.0'
,
'< 1.3'
pod
'AFNetworking'
,
'>= 1.0'
,
'< 1.3'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
==
[
'AFNetworking (1.2.1)'
]
specs
.
should
==
[
'AFNetworking (1.2.1)'
]
...
@@ -434,7 +446,7 @@ module Pod
...
@@ -434,7 +446,7 @@ module Pod
pod
'AFNetworking'
,
'~> 1.0'
,
'< 1.3'
pod
'AFNetworking'
,
'~> 1.0'
,
'< 1.3'
end
end
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
[]
,
SourcesManager
.
all
)
resolver
=
Resolver
.
new
(
config
.
sandbox
,
@podfile
,
empty_graph
,
SourcesManager
.
all
)
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
=
resolver
.
resolve
.
values
.
flatten
.
map
(
&
:to_s
).
sort
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
!=
[
'AFNetworking (1.0RC3)'
]
specs
.
should
==
[
'AFNetworking (1.2.1)'
]
specs
.
should
==
[
'AFNetworking (1.2.1)'
]
...
...
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