rubygems-update 2.1.9 → 2.1.10
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.
Potentially problematic release.
This version of rubygems-update might be problematic. Click here for more details.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.txt +26 -0
- data/Manifest.txt +1 -0
- data/Rakefile +1 -1
- data/lib/rubygems.rb +1 -1
- data/lib/rubygems/commands/update_command.rb +5 -1
- data/lib/rubygems/dependency_resolver.rb +5 -5
- data/lib/rubygems/dependency_resolver/dependency_request.rb +16 -0
- data/lib/rubygems/dependency_resolver/installed_specification.rb +10 -0
- data/lib/rubygems/errors.rb +5 -0
- data/lib/rubygems/exceptions.rb +11 -4
- data/lib/rubygems/ext/cmake_builder.rb +2 -0
- data/lib/rubygems/installer.rb +1 -0
- data/lib/rubygems/platform.rb +8 -0
- data/lib/rubygems/request_set.rb +22 -0
- data/lib/rubygems/server.rb +13 -5
- data/lib/rubygems/source.rb +6 -1
- data/lib/rubygems/spec_fetcher.rb +6 -1
- data/lib/rubygems/specification.rb +3 -0
- data/lib/rubygems/version.rb +1 -1
- data/test/rubygems/test_gem.rb +1 -0
- data/test/rubygems/test_gem_commands_update_command.rb +44 -0
- data/test/rubygems/test_gem_dependency_installer.rb +12 -1
- data/test/rubygems/test_gem_dependency_resolver.rb +67 -1
- data/test/rubygems/test_gem_server.rb +105 -1
- data/test/rubygems/test_gem_source.rb +10 -0
- data/test/rubygems/test_gem_source_fetch_problem.rb +19 -0
- data/test/rubygems/test_gem_source_specific_file.rb +1 -1
- data/test/rubygems/test_gem_spec_fetcher.rb +12 -0
- data/test/rubygems/test_gem_version.rb +4 -5
- metadata +5 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a483355c383b43daad6f12a1414d56c0f0b0a218
|
4
|
+
data.tar.gz: 9c4cb27991e51eb7b74c205d4f985b156b15ab39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa556141e6b125c84ea8f2c678a56b3289c0d1006080f5e6a948b429466e651c395b5dceca429f759493d089bc61b7c2dec0fe304e913d95245c2f5b6545b21b
|
7
|
+
data.tar.gz: d6066573d049e868179711a1fae2ba9c5aebcfe676167ab2dae4ba1aa364d9d3d6b186003b11536b3a65f4401ffbb86305b1c2e0d4e96a8142723b8592b2eda7
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# coding: UTF-8
|
2
2
|
|
3
|
+
=== 2.1.10 / 2013-10-24
|
4
|
+
|
5
|
+
* Use class check instead of :version method check when creating Gem::Version
|
6
|
+
objects. Fixes #674 by jkanywhere.
|
7
|
+
* Fail during `gem update` when an error occurs checking for newer versions.
|
8
|
+
This means RubyGems no longer reports "nothing to update" when it cannot
|
9
|
+
communicate with the server. Issue #688 by Jimmy Dee.
|
10
|
+
* Allow installation of gems when the home directory does not exist. Issue
|
11
|
+
#689 by Laurence Rowe
|
12
|
+
* Fix updating gems which have multiple platforms. Issue #693 by Ookami
|
13
|
+
Kenrou.
|
14
|
+
* The gem server now uses user-provided directories. Issue #696 by Marcelo
|
15
|
+
Alvim.
|
16
|
+
* Improved resolution of gems when specific versions have conflicting
|
17
|
+
dependencies.
|
18
|
+
* RubyGems installs local gems regardless of platform again. Issue #695
|
19
|
+
* The --ignore-dependencies option for gem installation works again. Issue
|
20
|
+
#695
|
21
|
+
|
3
22
|
=== 2.1.9 / 2013-10-14
|
4
23
|
|
5
24
|
Bug fixes:
|
@@ -189,6 +208,13 @@ Bug fixes:
|
|
189
208
|
* Fixed credential creation for `gem push` when `--host` is not given. Pull
|
190
209
|
request #622 by Arthur Nogueira Neves
|
191
210
|
|
211
|
+
=== 2.0.12 / 2013-10-14
|
212
|
+
|
213
|
+
Bug fixes:
|
214
|
+
|
215
|
+
* Proxy usernames and passwords are now escaped properly. Ruby Bug #8979 and
|
216
|
+
patch by Masahiro Tomita, Issue #668 by Kouhei Sutou.
|
217
|
+
|
192
218
|
=== 2.0.11 / 2013-10-08
|
193
219
|
|
194
220
|
Bug fixes:
|
data/Manifest.txt
CHANGED
@@ -273,6 +273,7 @@ test/rubygems/test_gem_security_trust_dir.rb
|
|
273
273
|
test/rubygems/test_gem_server.rb
|
274
274
|
test/rubygems/test_gem_silent_ui.rb
|
275
275
|
test/rubygems/test_gem_source.rb
|
276
|
+
test/rubygems/test_gem_source_fetch_problem.rb
|
276
277
|
test/rubygems/test_gem_source_installed.rb
|
277
278
|
test/rubygems/test_gem_source_list.rb
|
278
279
|
test/rubygems/test_gem_source_local.rb
|
data/Rakefile
CHANGED
data/lib/rubygems.rb
CHANGED
@@ -110,7 +110,11 @@ command to remove old versions.
|
|
110
110
|
|
111
111
|
fetcher = Gem::SpecFetcher.fetcher
|
112
112
|
|
113
|
-
spec_tuples,
|
113
|
+
spec_tuples, errors = fetcher.search_for_dependency dependency
|
114
|
+
|
115
|
+
error = errors.find { |e| e.respond_to? :exception }
|
116
|
+
|
117
|
+
raise error if error
|
114
118
|
|
115
119
|
spec_tuples
|
116
120
|
end
|
@@ -118,7 +118,7 @@ class Gem::DependencyResolver
|
|
118
118
|
# on the dep for the activation itself. Otherwise, issue
|
119
119
|
# it on the requester's request itself.
|
120
120
|
#
|
121
|
-
if existing.others_possible?
|
121
|
+
if existing.others_possible? or existing.request.requester.nil? then
|
122
122
|
conflict =
|
123
123
|
Gem::DependencyResolver::DependencyConflict.new dep, existing
|
124
124
|
else
|
@@ -132,8 +132,8 @@ class Gem::DependencyResolver
|
|
132
132
|
end
|
133
133
|
|
134
134
|
# Get a list of all specs that satisfy dep and platform
|
135
|
-
|
136
|
-
possible = select_local_platforms
|
135
|
+
all_possible = @set.find_all dep
|
136
|
+
possible = select_local_platforms all_possible
|
137
137
|
|
138
138
|
case possible.size
|
139
139
|
when 0
|
@@ -141,7 +141,7 @@ class Gem::DependencyResolver
|
|
141
141
|
|
142
142
|
unless @soft_missing
|
143
143
|
# If there are none, then our work here is done.
|
144
|
-
raise Gem::UnsatisfiableDependencyError,
|
144
|
+
raise Gem::UnsatisfiableDependencyError.new dep, all_possible
|
145
145
|
end
|
146
146
|
when 1
|
147
147
|
# If there is one, then we just add it to specs
|
@@ -234,7 +234,7 @@ class Gem::DependencyResolver
|
|
234
234
|
|
235
235
|
def select_local_platforms specs # :nodoc:
|
236
236
|
specs.select do |spec|
|
237
|
-
Gem::Platform.
|
237
|
+
Gem::Platform.installable? spec
|
238
238
|
end
|
239
239
|
end
|
240
240
|
|
@@ -32,6 +32,22 @@ class Gem::DependencyResolver::DependencyRequest
|
|
32
32
|
@dependency.name
|
33
33
|
end
|
34
34
|
|
35
|
+
# Indicate that the request is for a gem explicitly requested by the user
|
36
|
+
def explicit?
|
37
|
+
@requester.nil?
|
38
|
+
end
|
39
|
+
|
40
|
+
# Indicate that the requset is for a gem requested as a dependency of another gem
|
41
|
+
def implicit?
|
42
|
+
!explicit?
|
43
|
+
end
|
44
|
+
|
45
|
+
# Return a String indicating who caused this request to be added (only
|
46
|
+
# valid for implicit requests)
|
47
|
+
def request_context
|
48
|
+
@requester ? @requester.request : "(unknown)"
|
49
|
+
end
|
50
|
+
|
35
51
|
def pretty_print q # :nodoc:
|
36
52
|
q.group 2, '[Dependency request ', ']' do
|
37
53
|
q.breakable
|
@@ -30,6 +30,16 @@ class Gem::DependencyResolver::InstalledSpecification
|
|
30
30
|
@spec.platform
|
31
31
|
end
|
32
32
|
|
33
|
+
def installable_platform?
|
34
|
+
# BACKCOMPAT If the file is coming out of a specified file, then we
|
35
|
+
# ignore the platform. This code can be removed in RG 3.0.
|
36
|
+
if @source.kind_of? Gem::Source::SpecificFile
|
37
|
+
return true
|
38
|
+
else
|
39
|
+
Gem::Platform.match @spec.platform
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
33
43
|
def source
|
34
44
|
@source ||= Gem::Source::Installed.new
|
35
45
|
end
|
data/lib/rubygems/errors.rb
CHANGED
data/lib/rubygems/exceptions.rb
CHANGED
@@ -179,10 +179,17 @@ class Gem::UnsatisfiableDependencyError < Gem::Exception
|
|
179
179
|
|
180
180
|
attr_reader :dependency
|
181
181
|
|
182
|
-
def initialize dep
|
183
|
-
|
184
|
-
|
185
|
-
|
182
|
+
def initialize dep, platform_mismatch=nil
|
183
|
+
if platform_mismatch and !platform_mismatch.empty?
|
184
|
+
plats = platform_mismatch.map { |x| x.platform.to_s }.sort.uniq
|
185
|
+
super "Unable to resolve dependency: No match for '#{dep}' on this platform. Found: #{plats.join(', ')}"
|
186
|
+
else
|
187
|
+
if dep.explicit?
|
188
|
+
super "Unable to resolve dependency: user requested '#{dep}'"
|
189
|
+
else
|
190
|
+
super "Unable to resolve dependency: '#{dep.request_context}' requires '#{dep}'"
|
191
|
+
end
|
192
|
+
end
|
186
193
|
|
187
194
|
@dependency = dep
|
188
195
|
end
|
data/lib/rubygems/installer.rb
CHANGED
data/lib/rubygems/platform.rb
CHANGED
@@ -29,6 +29,14 @@ class Gem::Platform
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
def self.installable?(spec)
|
33
|
+
if spec.respond_to? :installable_platform?
|
34
|
+
spec.installable_platform?
|
35
|
+
else
|
36
|
+
match spec.platform
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
32
40
|
def self.new(arch) # :nodoc:
|
33
41
|
case arch
|
34
42
|
when Gem::Platform::CURRENT then
|
data/lib/rubygems/request_set.rb
CHANGED
@@ -5,6 +5,19 @@ require 'rubygems/dependency_list'
|
|
5
5
|
require 'rubygems/installer'
|
6
6
|
require 'tsort'
|
7
7
|
|
8
|
+
##
|
9
|
+
# A RequestSet groups a request to activate a set of dependencies.
|
10
|
+
#
|
11
|
+
# nokogiri = Gem::Dependency.new 'nokogiri', '~> 1.6'
|
12
|
+
# pg = Gem::Dependency.new 'pg', '~> 0.14'
|
13
|
+
#
|
14
|
+
# set = Gem::RequestSet.new nokogiri, pg
|
15
|
+
#
|
16
|
+
# requests = set.resolve
|
17
|
+
#
|
18
|
+
# p requests.map { |r| r.full_name }
|
19
|
+
# #=> ["nokogiri-1.6.0", "mini_portile-0.5.1", "pg-0.17.0"]
|
20
|
+
|
8
21
|
class Gem::RequestSet
|
9
22
|
|
10
23
|
include TSort
|
@@ -23,6 +36,15 @@ class Gem::RequestSet
|
|
23
36
|
|
24
37
|
attr_accessor :soft_missing
|
25
38
|
|
39
|
+
##
|
40
|
+
# Creates a RequestSet for a list of Gem::Dependency objects, +deps+. You
|
41
|
+
# can then #resolve and #install the resolved list of dependencies.
|
42
|
+
#
|
43
|
+
# nokogiri = Gem::Dependency.new 'nokogiri', '~> 1.6'
|
44
|
+
# pg = Gem::Dependency.new 'pg', '~> 0.14'
|
45
|
+
#
|
46
|
+
# set = Gem::RequestSet.new nokogiri, pg
|
47
|
+
|
26
48
|
def initialize *deps
|
27
49
|
@dependencies = deps
|
28
50
|
|
data/lib/rubygems/server.rb
CHANGED
@@ -445,7 +445,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
445
445
|
@spec_dirs = @gem_dirs.map { |gem_dir| File.join gem_dir, 'specifications' }
|
446
446
|
@spec_dirs.reject! { |spec_dir| !File.directory? spec_dir }
|
447
447
|
|
448
|
-
|
448
|
+
reset_gems
|
449
449
|
|
450
450
|
@have_rdoc_4_plus = nil
|
451
451
|
end
|
@@ -470,7 +470,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
470
470
|
end
|
471
471
|
|
472
472
|
def latest_specs(req, res)
|
473
|
-
|
473
|
+
reset_gems
|
474
474
|
|
475
475
|
res['content-type'] = 'application/x-gzip'
|
476
476
|
|
@@ -531,7 +531,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
531
531
|
end
|
532
532
|
|
533
533
|
def quick(req, res)
|
534
|
-
|
534
|
+
reset_gems
|
535
535
|
|
536
536
|
res['content-type'] = 'text/plain'
|
537
537
|
add_date res
|
@@ -567,7 +567,8 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
567
567
|
end
|
568
568
|
|
569
569
|
def root(req, res)
|
570
|
-
|
570
|
+
reset_gems
|
571
|
+
|
571
572
|
add_date res
|
572
573
|
|
573
574
|
raise WEBrick::HTTPStatus::NotFound, "`#{req.path}' not found." unless
|
@@ -697,6 +698,13 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
697
698
|
res.body = template.result binding
|
698
699
|
end
|
699
700
|
|
701
|
+
##
|
702
|
+
# Updates the server to use the latest installed gems.
|
703
|
+
|
704
|
+
def reset_gems # :nodoc:
|
705
|
+
Gem::Specification.dirs = @gem_dirs
|
706
|
+
end
|
707
|
+
|
700
708
|
##
|
701
709
|
# Returns true and prepares http response, if rdoc for the requested gem
|
702
710
|
# name pattern was found.
|
@@ -787,7 +795,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
787
795
|
end
|
788
796
|
|
789
797
|
def specs(req, res)
|
790
|
-
|
798
|
+
reset_gems
|
791
799
|
|
792
800
|
add_date res
|
793
801
|
|
data/lib/rubygems/source.rb
CHANGED
@@ -71,7 +71,12 @@ class Gem::Source
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def update_cache?
|
74
|
-
@update_cache ||=
|
74
|
+
@update_cache ||=
|
75
|
+
begin
|
76
|
+
File.stat(Gem.user_home).uid == Process.uid
|
77
|
+
rescue Errno::ENOENT
|
78
|
+
false
|
79
|
+
end
|
75
80
|
end
|
76
81
|
|
77
82
|
def fetch_spec(name)
|
@@ -38,7 +38,12 @@ class Gem::SpecFetcher
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def initialize
|
41
|
-
@update_cache =
|
41
|
+
@update_cache =
|
42
|
+
begin
|
43
|
+
File.stat(Gem.user_home).uid == Process.uid
|
44
|
+
rescue Errno::EACCES, Errno::ENOENT
|
45
|
+
false
|
46
|
+
end
|
42
47
|
|
43
48
|
@specs = {}
|
44
49
|
@latest_specs = {}
|
@@ -1731,6 +1731,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1731
1731
|
end
|
1732
1732
|
|
1733
1733
|
def init_with coder # :nodoc:
|
1734
|
+
@installed_by_version ||= nil
|
1734
1735
|
yaml_initialize coder.tag, coder.map
|
1735
1736
|
end
|
1736
1737
|
|
@@ -2590,6 +2591,8 @@ licenses is empty. Use a license abbreviation from:
|
|
2590
2591
|
|
2591
2592
|
instance_variable_set "@#{attribute}", value
|
2592
2593
|
end
|
2594
|
+
|
2595
|
+
@installed_by_version ||= nil
|
2593
2596
|
end
|
2594
2597
|
|
2595
2598
|
extend Gem::Deprecate
|
data/lib/rubygems/version.rb
CHANGED
@@ -177,7 +177,7 @@ class Gem::Version
|
|
177
177
|
# REFACTOR: There's no real reason this should be separate from #initialize.
|
178
178
|
|
179
179
|
def self.create input
|
180
|
-
if input
|
180
|
+
if self === input then # check yourself before you wreck yourself
|
181
181
|
input
|
182
182
|
elsif input.nil? then
|
183
183
|
nil
|
data/test/rubygems/test_gem.rb
CHANGED
@@ -373,6 +373,50 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
|
|
373
373
|
assert user_install, 'user_install must be set on the installer'
|
374
374
|
end
|
375
375
|
|
376
|
+
def test_fetch_remote_gems
|
377
|
+
expected = [
|
378
|
+
[Gem::NameTuple.new('a', v(2), Gem::Platform::RUBY),
|
379
|
+
Gem::Source.new(@gem_repo)],
|
380
|
+
]
|
381
|
+
|
382
|
+
assert_equal expected, @cmd.fetch_remote_gems(@a1)
|
383
|
+
end
|
384
|
+
|
385
|
+
def test_fetch_remote_gems_error
|
386
|
+
Gem.sources.replace %w[http://nonexistent.example]
|
387
|
+
|
388
|
+
assert_raises Gem::RemoteFetcher::FetchError do
|
389
|
+
@cmd.fetch_remote_gems @a1
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
def test_fetch_remote_gems_mismatch
|
394
|
+
platform = Gem::Platform.new 'x86-freebsd9'
|
395
|
+
a2_p = quick_spec 'a', 2 do |s| s.platform = platform end
|
396
|
+
|
397
|
+
util_setup_spec_fetcher @a2, a2_p
|
398
|
+
|
399
|
+
expected = [
|
400
|
+
[Gem::NameTuple.new('a', v(2), Gem::Platform::RUBY),
|
401
|
+
Gem::Source.new(@gem_repo)],
|
402
|
+
]
|
403
|
+
|
404
|
+
assert_equal expected, @cmd.fetch_remote_gems(@a1)
|
405
|
+
end
|
406
|
+
|
407
|
+
def test_fetch_remote_gems_prerelease
|
408
|
+
@cmd.options[:prerelease] = true
|
409
|
+
|
410
|
+
expected = [
|
411
|
+
[Gem::NameTuple.new('a', v(2), Gem::Platform::RUBY),
|
412
|
+
Gem::Source.new(@gem_repo)],
|
413
|
+
[Gem::NameTuple.new('a', v('3.a'), Gem::Platform::RUBY),
|
414
|
+
Gem::Source.new(@gem_repo)],
|
415
|
+
]
|
416
|
+
|
417
|
+
assert_equal expected, @cmd.fetch_remote_gems(@a1)
|
418
|
+
end
|
419
|
+
|
376
420
|
def test_handle_options_system
|
377
421
|
@cmd.handle_options %w[--system]
|
378
422
|
|
@@ -647,7 +647,7 @@ class TestGemDependencyInstaller < Gem::TestCase
|
|
647
647
|
inst.install 'b'
|
648
648
|
end
|
649
649
|
|
650
|
-
expected = "Unable to resolve dependency: b (= 1) requires a (>= 0)"
|
650
|
+
expected = "Unable to resolve dependency: 'b (= 1)' requires 'a (>= 0)'"
|
651
651
|
assert_equal expected, e.message
|
652
652
|
end
|
653
653
|
|
@@ -781,6 +781,17 @@ class TestGemDependencyInstaller < Gem::TestCase
|
|
781
781
|
assert_equal %w[a-1], inst.installed_gems.map { |s| s.full_name }
|
782
782
|
end
|
783
783
|
|
784
|
+
def test_install_platform_is_ignored_when_a_file_is_specified
|
785
|
+
_, a_gem = util_gem 'a', '1' do |s|
|
786
|
+
s.platform = Gem::Platform.new %w[cpu other_platform 1]
|
787
|
+
end
|
788
|
+
|
789
|
+
inst = Gem::DependencyInstaller.new :domain => :local
|
790
|
+
inst.install a_gem
|
791
|
+
|
792
|
+
assert_equal %w[a-1-cpu-other_platform-1], inst.installed_gems.map { |s| s.full_name }
|
793
|
+
end
|
794
|
+
|
784
795
|
if defined? OpenSSL then
|
785
796
|
def test_install_security_policy
|
786
797
|
util_setup_gems
|
@@ -205,7 +205,7 @@ class TestGemDependencyResolver < Gem::TestCase
|
|
205
205
|
r.resolve
|
206
206
|
end
|
207
207
|
|
208
|
-
assert_equal "Unable to resolve dependency:
|
208
|
+
assert_equal "Unable to resolve dependency: user requested 'a (>= 0)'",
|
209
209
|
e.message
|
210
210
|
|
211
211
|
assert_equal "a (>= 0)", e.dependency.to_s
|
@@ -225,6 +225,37 @@ class TestGemDependencyResolver < Gem::TestCase
|
|
225
225
|
assert_equal "a (= 3)", e.dependency.to_s
|
226
226
|
end
|
227
227
|
|
228
|
+
def test_raises_and_reports_a_toplevel_request_properly
|
229
|
+
a1 = util_spec "a", "1"
|
230
|
+
ad = make_dep "a", "= 3"
|
231
|
+
|
232
|
+
r = Gem::DependencyResolver.new([ad], set(a1))
|
233
|
+
|
234
|
+
e = assert_raises Gem::UnsatisfiableDepedencyError do
|
235
|
+
r.resolve
|
236
|
+
end
|
237
|
+
|
238
|
+
assert_equal "Unable to resolve dependency: user requested 'a (= 3)'",
|
239
|
+
e.message
|
240
|
+
end
|
241
|
+
|
242
|
+
def test_raises_and_reports_an_implicit_request_properly
|
243
|
+
a1 = util_spec "a", "1" do |s|
|
244
|
+
s.add_runtime_dependency 'b', '= 2'
|
245
|
+
end
|
246
|
+
|
247
|
+
ad = make_dep "a", "= 1"
|
248
|
+
|
249
|
+
r = Gem::DependencyResolver.new([ad], set(a1))
|
250
|
+
|
251
|
+
e = assert_raises Gem::UnsatisfiableDepedencyError do
|
252
|
+
r.resolve
|
253
|
+
end
|
254
|
+
|
255
|
+
assert_equal "Unable to resolve dependency: 'a (= 1)' requires 'b (= 2)'",
|
256
|
+
e.message
|
257
|
+
end
|
258
|
+
|
228
259
|
def test_raises_when_possibles_are_exhausted
|
229
260
|
a1 = util_spec "a", "1", "c" => ">= 2"
|
230
261
|
b1 = util_spec "b", "1", "c" => "= 1"
|
@@ -313,6 +344,24 @@ class TestGemDependencyResolver < Gem::TestCase
|
|
313
344
|
end
|
314
345
|
end
|
315
346
|
|
347
|
+
def test_resolve_conflict
|
348
|
+
a1 = util_spec 'a', 1
|
349
|
+
a2 = util_spec 'a', 2
|
350
|
+
|
351
|
+
b2 = util_spec 'b', 2, 'a' => '~> 2.0'
|
352
|
+
|
353
|
+
s = set a1, a2, b2
|
354
|
+
|
355
|
+
a_dep = dep 'a', '~> 1.0'
|
356
|
+
b_dep = dep 'b'
|
357
|
+
|
358
|
+
r = Gem::DependencyResolver.new [a_dep, b_dep], s
|
359
|
+
|
360
|
+
assert_raises Gem::DependencyResolutionError do
|
361
|
+
r.resolve
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
316
365
|
# actionmailer 2.3.4
|
317
366
|
# activemerchant 1.5.0
|
318
367
|
# activesupport 2.3.5, 2.3.4
|
@@ -366,5 +415,22 @@ class TestGemDependencyResolver < Gem::TestCase
|
|
366
415
|
assert_equal [a1, a1_p1], selected
|
367
416
|
end
|
368
417
|
|
418
|
+
def test_raises_and_explains_when_platform_prevents_install
|
419
|
+
a1 = util_spec "a", "1" do |s|
|
420
|
+
s.platform = Gem::Platform.new %w[c p 1]
|
421
|
+
end
|
422
|
+
|
423
|
+
ad = make_dep "a", "= 1"
|
424
|
+
|
425
|
+
r = Gem::DependencyResolver.new([ad], set(a1))
|
426
|
+
|
427
|
+
e = assert_raises Gem::UnsatisfiableDepedencyError do
|
428
|
+
r.resolve
|
429
|
+
end
|
430
|
+
|
431
|
+
assert_match "No match for 'a (= 1)' on this platform. Found: c-p-1",
|
432
|
+
e.message
|
433
|
+
end
|
434
|
+
|
369
435
|
end
|
370
436
|
|
@@ -85,6 +85,30 @@ class TestGemServer < Gem::TestCase
|
|
85
85
|
Marshal.load(@res.body)
|
86
86
|
end
|
87
87
|
|
88
|
+
def test_latest_specs_gemdirs
|
89
|
+
data = StringIO.new "GET /latest_specs.#{Gem.marshal_version} HTTP/1.0\r\n\r\n"
|
90
|
+
dir = "#{@gemhome}2"
|
91
|
+
|
92
|
+
spec = quick_spec 'z', 9
|
93
|
+
|
94
|
+
specs_dir = File.join dir, 'specifications'
|
95
|
+
FileUtils.mkdir_p specs_dir
|
96
|
+
|
97
|
+
open File.join(specs_dir, spec.spec_name), 'w' do |io|
|
98
|
+
io.write spec.to_ruby
|
99
|
+
end
|
100
|
+
|
101
|
+
server = Gem::Server.new dir, process_based_port, false
|
102
|
+
|
103
|
+
@req.parse data
|
104
|
+
|
105
|
+
server.latest_specs @req, @res
|
106
|
+
|
107
|
+
assert_equal 200, @res.status
|
108
|
+
|
109
|
+
assert_equal [['z', v(9), Gem::Platform::RUBY]], Marshal.load(@res.body)
|
110
|
+
end
|
111
|
+
|
88
112
|
def test_latest_specs_gz
|
89
113
|
data = StringIO.new "GET /latest_specs.#{Gem.marshal_version}.gz HTTP/1.0\r\n\r\n"
|
90
114
|
@req.parse data
|
@@ -120,8 +144,41 @@ class TestGemServer < Gem::TestCase
|
|
120
144
|
assert_equal 2, @server.server.listeners.length
|
121
145
|
end
|
122
146
|
|
147
|
+
def test_quick_gemdirs
|
148
|
+
data = StringIO.new "GET /quick/Marshal.4.8/z-9.gemspec.rz HTTP/1.0\r\n\r\n"
|
149
|
+
dir = "#{@gemhome}2"
|
150
|
+
|
151
|
+
server = Gem::Server.new dir, process_based_port, false
|
152
|
+
|
153
|
+
@req.parse data
|
154
|
+
|
155
|
+
server.quick @req, @res
|
156
|
+
|
157
|
+
assert_equal 404, @res.status
|
158
|
+
|
159
|
+
spec = quick_spec 'z', 9
|
160
|
+
|
161
|
+
specs_dir = File.join dir, 'specifications'
|
162
|
+
|
163
|
+
FileUtils.mkdir_p specs_dir
|
164
|
+
|
165
|
+
open File.join(specs_dir, spec.spec_name), 'w' do |io|
|
166
|
+
io.write spec.to_ruby
|
167
|
+
end
|
168
|
+
|
169
|
+
data.rewind
|
170
|
+
|
171
|
+
req = WEBrick::HTTPRequest.new :Logger => nil
|
172
|
+
res = WEBrick::HTTPResponse.new :HTTPVersion => '1.0'
|
173
|
+
req.parse data
|
174
|
+
|
175
|
+
server.quick req, res
|
176
|
+
|
177
|
+
assert_equal 200, res.status
|
178
|
+
end
|
179
|
+
|
123
180
|
def test_quick_missing
|
124
|
-
data = StringIO.new "GET /quick/z-9.gemspec.rz HTTP/1.0\r\n\r\n"
|
181
|
+
data = StringIO.new "GET /quick/Marshal.4.8/z-9.gemspec.rz HTTP/1.0\r\n\r\n"
|
125
182
|
@req.parse data
|
126
183
|
|
127
184
|
@server.quick @req, @res
|
@@ -188,6 +245,29 @@ class TestGemServer < Gem::TestCase
|
|
188
245
|
assert_equal 'text/html', @res['content-type']
|
189
246
|
end
|
190
247
|
|
248
|
+
def test_root_gemdirs
|
249
|
+
data = StringIO.new "GET / HTTP/1.0\r\n\r\n"
|
250
|
+
dir = "#{@gemhome}2"
|
251
|
+
|
252
|
+
spec = quick_spec 'z', 9
|
253
|
+
|
254
|
+
specs_dir = File.join dir, 'specifications'
|
255
|
+
FileUtils.mkdir_p specs_dir
|
256
|
+
|
257
|
+
open File.join(specs_dir, spec.spec_name), 'w' do |io|
|
258
|
+
io.write spec.to_ruby
|
259
|
+
end
|
260
|
+
|
261
|
+
server = Gem::Server.new dir, process_based_port, false
|
262
|
+
|
263
|
+
@req.parse data
|
264
|
+
|
265
|
+
server.root @req, @res
|
266
|
+
|
267
|
+
assert_equal 200, @res.status
|
268
|
+
assert_match 'z 9', @res.body
|
269
|
+
end
|
270
|
+
|
191
271
|
def test_specs
|
192
272
|
data = StringIO.new "GET /specs.#{Gem.marshal_version} HTTP/1.0\r\n\r\n"
|
193
273
|
@req.parse data
|
@@ -203,6 +283,30 @@ class TestGemServer < Gem::TestCase
|
|
203
283
|
Marshal.load(@res.body)
|
204
284
|
end
|
205
285
|
|
286
|
+
def test_specs_gemdirs
|
287
|
+
data = StringIO.new "GET /specs.#{Gem.marshal_version} HTTP/1.0\r\n\r\n"
|
288
|
+
dir = "#{@gemhome}2"
|
289
|
+
|
290
|
+
spec = quick_spec 'z', 9
|
291
|
+
|
292
|
+
specs_dir = File.join dir, 'specifications'
|
293
|
+
FileUtils.mkdir_p specs_dir
|
294
|
+
|
295
|
+
open File.join(specs_dir, spec.spec_name), 'w' do |io|
|
296
|
+
io.write spec.to_ruby
|
297
|
+
end
|
298
|
+
|
299
|
+
server = Gem::Server.new dir, process_based_port, false
|
300
|
+
|
301
|
+
@req.parse data
|
302
|
+
|
303
|
+
server.specs @req, @res
|
304
|
+
|
305
|
+
assert_equal 200, @res.status
|
306
|
+
|
307
|
+
assert_equal [['z', v(9), Gem::Platform::RUBY]], Marshal.load(@res.body)
|
308
|
+
end
|
309
|
+
|
206
310
|
def test_specs_gz
|
207
311
|
data = StringIO.new "GET /specs.#{Gem.marshal_version}.gz HTTP/1.0\r\n\r\n"
|
208
312
|
@req.parse data
|
@@ -207,5 +207,15 @@ class TestGemSource < Gem::TestCase
|
|
207
207
|
assert_equal(-1, remote. <=>(no_uri), 'remote <=> no_uri')
|
208
208
|
end
|
209
209
|
|
210
|
+
def test_update_cache_eh
|
211
|
+
assert @source.update_cache?
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_update_cache_eh_home_nonexistent
|
215
|
+
FileUtils.rmdir Gem.user_home
|
216
|
+
|
217
|
+
refute @source.update_cache?
|
218
|
+
end
|
219
|
+
|
210
220
|
end
|
211
221
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems/test_case'
|
2
|
+
|
3
|
+
class TestGemSourceFetchProblem < Gem::TestCase
|
4
|
+
|
5
|
+
def test_exception
|
6
|
+
source = Gem::Source.new @gem_repo
|
7
|
+
error = RuntimeError.new 'test'
|
8
|
+
|
9
|
+
sf = Gem::SourceFetchProblem.new source, error
|
10
|
+
|
11
|
+
e = assert_raises RuntimeError do
|
12
|
+
raise sf
|
13
|
+
end
|
14
|
+
|
15
|
+
assert_equal 'test', e.message
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
@@ -52,6 +52,18 @@ class TestGemSpecFetcher < Gem::TestCase
|
|
52
52
|
['x', Gem::Version.new(1), 'ruby']]
|
53
53
|
end
|
54
54
|
|
55
|
+
def test_initialize_unwritable_home_dir
|
56
|
+
skip 'chmod not supported' if Gem.win_platform?
|
57
|
+
|
58
|
+
FileUtils.chmod 0000, Gem.user_home
|
59
|
+
|
60
|
+
begin
|
61
|
+
assert Gem::SpecFetcher.new
|
62
|
+
ensure
|
63
|
+
FileUtils.chmod 0755, Gem.user_home
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
55
67
|
def test_spec_for_dependency_all
|
56
68
|
d = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}"
|
57
69
|
@fetcher.data["#{d}#{@a1.spec_name}.rz"] = util_zip(Marshal.dump(@a1))
|
@@ -23,14 +23,13 @@ class TestGemVersion < Gem::TestCase
|
|
23
23
|
assert_bumped_version_equal "6", "5"
|
24
24
|
end
|
25
25
|
|
26
|
-
#
|
27
|
-
#
|
26
|
+
# A Gem::Version is already a Gem::Version and therefore not transformed by
|
27
|
+
# Gem::Version.create
|
28
28
|
|
29
29
|
def test_class_create
|
30
|
-
|
31
|
-
def fake.version; "1.0" end
|
30
|
+
real = Gem::Version.new(1.0)
|
32
31
|
|
33
|
-
assert_same
|
32
|
+
assert_same real, Gem::Version.create(real)
|
34
33
|
assert_nil Gem::Version.create(nil)
|
35
34
|
assert_equal v("5.1"), Gem::Version.create("5.1")
|
36
35
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubygems-update
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Weirich
|
@@ -32,7 +32,7 @@ cert_chain:
|
|
32
32
|
KDyY1VIazVgoC8XvR4h/95/iScPiuglzA+DBG1hip1xScAtw05BrXyUNrc9CEMYU
|
33
33
|
wgF94UVoHRp6ywo8I7NP3HcwFQDFNEZPNGXsng==
|
34
34
|
-----END CERTIFICATE-----
|
35
|
-
date: 2013-10-
|
35
|
+
date: 2013-10-25 00:00:00.000000000 Z
|
36
36
|
dependencies:
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: minitest
|
@@ -448,6 +448,7 @@ files:
|
|
448
448
|
- test/rubygems/test_gem_server.rb
|
449
449
|
- test/rubygems/test_gem_silent_ui.rb
|
450
450
|
- test/rubygems/test_gem_source.rb
|
451
|
+
- test/rubygems/test_gem_source_fetch_problem.rb
|
451
452
|
- test/rubygems/test_gem_source_installed.rb
|
452
453
|
- test/rubygems/test_gem_source_list.rb
|
453
454
|
- test/rubygems/test_gem_source_local.rb
|
@@ -495,7 +496,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
495
496
|
version: '0'
|
496
497
|
requirements: []
|
497
498
|
rubyforge_project: rubygems-update
|
498
|
-
rubygems_version: 2.1.
|
499
|
+
rubygems_version: 2.1.9
|
499
500
|
signing_key:
|
500
501
|
specification_version: 4
|
501
502
|
summary: RubyGems is a package management framework for Ruby
|
@@ -583,6 +584,7 @@ test_files:
|
|
583
584
|
- test/rubygems/test_gem_server.rb
|
584
585
|
- test/rubygems/test_gem_silent_ui.rb
|
585
586
|
- test/rubygems/test_gem_source.rb
|
587
|
+
- test/rubygems/test_gem_source_fetch_problem.rb
|
586
588
|
- test/rubygems/test_gem_source_installed.rb
|
587
589
|
- test/rubygems/test_gem_source_list.rb
|
588
590
|
- test/rubygems/test_gem_source_local.rb
|
metadata.gz.sig
CHANGED
Binary file
|