rubygems-update 2.4.1 → 2.4.2
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 +38 -0
- data/README.rdoc +1 -1
- data/Rakefile +3 -3
- data/lib/rubygems.rb +1 -1
- data/lib/rubygems/command_manager.rb +1 -1
- data/lib/rubygems/commands/owner_command.rb +3 -1
- data/lib/rubygems/commands/update_command.rb +6 -5
- data/lib/rubygems/config_file.rb +1 -1
- data/lib/rubygems/dependency.rb +4 -2
- data/lib/rubygems/dependency_installer.rb +2 -0
- data/lib/rubygems/exceptions.rb +2 -2
- data/lib/rubygems/installer.rb +13 -4
- data/lib/rubygems/local_remote_options.rb +1 -1
- data/lib/rubygems/package/tar_reader/entry.rb +2 -0
- data/lib/rubygems/rdoc.rb +0 -1
- data/lib/rubygems/request/connection_pools.rb +5 -3
- data/lib/rubygems/request_set.rb +57 -1
- data/lib/rubygems/request_set/gem_dependency_api.rb +58 -10
- data/lib/rubygems/request_set/lockfile.rb +13 -5
- data/lib/rubygems/resolver.rb +2 -1
- data/lib/rubygems/resolver/composed_set.rb +12 -0
- data/lib/rubygems/resolver/conflict.rb +2 -2
- data/lib/rubygems/resolver/dependency_request.rb +2 -2
- data/lib/rubygems/resolver/index_set.rb +1 -1
- data/lib/rubygems/resolver/installer_set.rb +6 -0
- data/lib/rubygems/resolver/lock_specification.rb +4 -0
- data/lib/rubygems/resolver/set.rb +8 -2
- data/lib/rubygems/resolver/vendor_set.rb +2 -0
- data/lib/rubygems/source.rb +2 -0
- data/lib/rubygems/source/git.rb +10 -2
- data/lib/rubygems/specification.rb +9 -3
- data/lib/rubygems/stub_specification.rb +5 -0
- data/lib/rubygems/test_case.rb +1 -1
- data/lib/rubygems/test_utilities.rb +2 -0
- data/lib/rubygems/user_interaction.rb +10 -0
- data/lib/rubygems/util.rb +14 -1
- data/test/rubygems/test_gem_commands_setup_command.rb +6 -8
- data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
- data/test/rubygems/test_gem_commands_update_command.rb +28 -0
- data/test/rubygems/test_gem_dependency.rb +27 -0
- data/test/rubygems/test_gem_dependency_installer.rb +21 -0
- data/test/rubygems/test_gem_ext_builder.rb +1 -1
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +6 -6
- data/test/rubygems/test_gem_installer.rb +27 -3
- data/test/rubygems/test_gem_remote_fetcher.rb +4 -0
- data/test/rubygems/test_gem_request_connection_pools.rb +37 -0
- data/test/rubygems/test_gem_request_set.rb +20 -1
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +95 -9
- data/test/rubygems/test_gem_request_set_lockfile.rb +54 -0
- data/test/rubygems/test_gem_resolver_composed_set.rb +13 -0
- data/test/rubygems/test_gem_resolver_conflict.rb +2 -2
- data/test/rubygems/test_gem_resolver_dependency_request.rb +9 -0
- data/test/rubygems/test_gem_resolver_installer_set.rb +12 -0
- data/test/rubygems/test_gem_resolver_lock_specification.rb +11 -0
- data/test/rubygems/test_gem_resolver_vendor_set.rb +3 -1
- data/test/rubygems/test_gem_silent_ui.rb +5 -0
- data/test/rubygems/test_gem_source.rb +13 -0
- data/test/rubygems/test_gem_source_git.rb +15 -0
- data/test/rubygems/test_gem_specification.rb +46 -10
- data/test/rubygems/test_gem_stub_specification.rb +10 -0
- metadata +3 -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: 88e0d3f158fcc7b8b91f1bc7931978ef4ebe1013
|
4
|
+
data.tar.gz: 9ee4968c6949df2953caa20c11dd16963b4bf1c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbfb3e275c5326017d610784402092a211ea2afe2babd669f63d58a0dfffda0de3845c746b6b48cbfe06630ad2dc91b8c825b17902ab4dab1021cc1aff7f85f3
|
7
|
+
data.tar.gz: 65e0a8835e1494de14f03a43f31f51f419006dd54ff2a42c9169a9ce3c0b5c4fec323e09772fcecebf31486fcbbb23c9078e15fb22418fcc81461d1789b9f472
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
@@ -1,5 +1,43 @@
|
|
1
1
|
# coding: UTF-8
|
2
2
|
|
3
|
+
=== 2.4.2 / 2014-10-01
|
4
|
+
|
5
|
+
This release was sponsored by Ruby Central.
|
6
|
+
|
7
|
+
Bug fixes:
|
8
|
+
|
9
|
+
* RubyGems now correctly matches wildcard no_proxy hosts. Issue #997 by
|
10
|
+
voelzemo.
|
11
|
+
* Added support for missing git_source method in the gem dependencies API.
|
12
|
+
* Fixed handling of git gems with an alternate install directory.
|
13
|
+
* Lockfiles will no longer be truncated upon resolution errors.
|
14
|
+
* Fixed messaging for `gem owner -a`. Issue #1004 by Aaron Patterson, Ryan
|
15
|
+
Davis.
|
16
|
+
* Removed meaningless ensure. Pull request #1003 by gogotanaka.
|
17
|
+
* Improved wording of --source option help. Pull request #989 by Jason Clark.
|
18
|
+
* Empty build_info files are now ignored. Issue #903 by Adan Alvarado.
|
19
|
+
* Gem::Installer ignores dependency checks when installing development
|
20
|
+
dependencies. Issue #994 by Jens Willie.
|
21
|
+
* `gem update` now continues after dependency errors. Issue #993 by aaronchi.
|
22
|
+
* RubyGems no longer warns about semantic version dependencies for the 0.x
|
23
|
+
range. Issue #987 by Jeff Felchner, pull request #1006 by Hsing-Hui Hsu.
|
24
|
+
* Added minimal lock to allow multithread installation of gems. Issue #982
|
25
|
+
and pull request #1005 by Yorick Peterse
|
26
|
+
* RubyGems now considers prerelease dependencies as it did in earlier versions
|
27
|
+
when --prerelease is given. Issue #990 by Jeremy Tryba.
|
28
|
+
* Updated capitalization in README. Issue #1010 by Ben Bodenmiller.
|
29
|
+
* Fixed activating gems from a Gemfile for default gems. Issue #991 by khoan.
|
30
|
+
* Fixed windows stub script generation for Cygwin. Issue #1000 by Brett
|
31
|
+
DiFrischia.
|
32
|
+
* Allow gem bindir and ruby.exe to live in separate diretories. Pull request
|
33
|
+
#942 by Ian Flynn.
|
34
|
+
* Fixed handling of gemspec in gem dependencies files to match Bundler
|
35
|
+
behavior. Issue #1020 by Michal Papis.
|
36
|
+
* Fixed `gem update` when updating to prereleases. Issue #1028 by Santiago
|
37
|
+
Pastorino.
|
38
|
+
* RubyGems now fails immediately when a git reference cannot be found instead
|
39
|
+
of spewing git errors. Issue #1031 by Michal Papis
|
40
|
+
|
3
41
|
=== 2.4.1 / 2014-07-17
|
4
42
|
|
5
43
|
Bug fixes:
|
data/README.rdoc
CHANGED
@@ -47,7 +47,7 @@ support request at {help.rubygems.org}[http://help.rubygems.org].
|
|
47
47
|
Got a bug and you're not sure? You're sure you have a bug, but don't know
|
48
48
|
what to do next? In any case, let us know about it! The best place
|
49
49
|
for letting the RubyGems team know about bugs or problems you're having is
|
50
|
-
{on the
|
50
|
+
{on the RubyGems issues page at GitHub}[http://github.com/rubygems/rubygems/issues].
|
51
51
|
|
52
52
|
=== Bundler Compatibility
|
53
53
|
|
data/Rakefile
CHANGED
@@ -34,7 +34,7 @@ hoe = Hoe.spec 'rubygems-update' do
|
|
34
34
|
spec_extras[:executables] = ['update_rubygems']
|
35
35
|
|
36
36
|
rdoc_locations <<
|
37
|
-
'
|
37
|
+
'docs.seattlerb.org:/data/www/docs.seattlerb.org/rubygems/'
|
38
38
|
|
39
39
|
clean_globs.push('**/debug.log',
|
40
40
|
'*.out',
|
@@ -152,7 +152,7 @@ task :upload_to_gemcutter do
|
|
152
152
|
sh "s3cmd put -P pkg/rubygems-update-#{v}.gem pkg/rubygems-#{v}.zip pkg/rubygems-#{v}.tgz s3://production.s3.rubygems.org/rubygems/"
|
153
153
|
end
|
154
154
|
|
155
|
-
desc "Upload release to
|
155
|
+
desc "Upload release to rubygems.org"
|
156
156
|
task :upload => %w[upload_to_gemcutter]
|
157
157
|
|
158
158
|
on_master = `git branch --list master`.strip == '* master'
|
@@ -324,7 +324,7 @@ SHA256 Checksums:
|
|
324
324
|
#{checksums}
|
325
325
|
|
326
326
|
[download]: http://rubygems.org/pages/download
|
327
|
-
[upgrading]: http://
|
327
|
+
[upgrading]: http://docs.seattlerb.org/rubygems/UPGRADING_rdoc.html
|
328
328
|
|
329
329
|
ANNOUNCEMENT
|
330
330
|
|
data/lib/rubygems.rb
CHANGED
@@ -137,7 +137,7 @@ class Gem::CommandManager
|
|
137
137
|
def run(args, build_args=nil)
|
138
138
|
process_args(args, build_args)
|
139
139
|
rescue StandardError, Timeout::Error => ex
|
140
|
-
alert_error "While executing gem ... (#{ex.class})\n #{ex
|
140
|
+
alert_error "While executing gem ... (#{ex.class})\n #{ex}"
|
141
141
|
ui.backtrace ex
|
142
142
|
|
143
143
|
terminate_interaction(1)
|
@@ -16,6 +16,8 @@ class Gem::Commands::UpdateCommand < Gem::Command
|
|
16
16
|
|
17
17
|
attr_reader :installer # :nodoc:
|
18
18
|
|
19
|
+
attr_reader :updated # :nodoc:
|
20
|
+
|
19
21
|
def initialize
|
20
22
|
super 'update', 'Update installed gems to the latest version',
|
21
23
|
:document => %w[rdoc ri],
|
@@ -201,17 +203,16 @@ command to remove old versions.
|
|
201
203
|
def update_gem name, version = Gem::Requirement.default
|
202
204
|
return if @updated.any? { |spec| spec.name == name }
|
203
205
|
|
204
|
-
|
206
|
+
update_options = options.dup
|
207
|
+
update_options[:prerelease] = version.prerelease?
|
205
208
|
|
206
|
-
|
209
|
+
@installer = Gem::DependencyInstaller.new update_options
|
207
210
|
|
208
211
|
say "Updating #{name}"
|
209
212
|
begin
|
210
213
|
@installer.install name, Gem::Requirement.new(version)
|
211
|
-
|
212
|
-
rescue Gem::InstallError => e
|
214
|
+
rescue Gem::InstallError, Gem::DependencyError => e
|
213
215
|
alert_error "Error installing #{name}:\n\t#{e.message}"
|
214
|
-
success = false
|
215
216
|
end
|
216
217
|
|
217
218
|
@installer.installed_gems.each do |spec|
|
data/lib/rubygems/config_file.rb
CHANGED
@@ -337,7 +337,7 @@ if you believe they were disclosed to a third party.
|
|
337
337
|
end
|
338
338
|
return content
|
339
339
|
rescue *YAMLErrors => e
|
340
|
-
warn "Failed to load #{filename}, #{e
|
340
|
+
warn "Failed to load #{filename}, #{e}"
|
341
341
|
rescue Errno::EACCES
|
342
342
|
warn "Failed to load #{filename} due to permissions problem."
|
343
343
|
end
|
data/lib/rubygems/dependency.rb
CHANGED
@@ -216,7 +216,7 @@ class Gem::Dependency
|
|
216
216
|
# NOTE: Unlike #matches_spec? this method does not return true when the
|
217
217
|
# version is a prerelease version unless this is a prerelease dependency.
|
218
218
|
|
219
|
-
def match? obj, version=nil
|
219
|
+
def match? obj, version=nil, allow_prerelease=false
|
220
220
|
if !version
|
221
221
|
name = obj.name
|
222
222
|
version = obj.version
|
@@ -229,7 +229,9 @@ class Gem::Dependency
|
|
229
229
|
version = Gem::Version.new version
|
230
230
|
|
231
231
|
return true if requirement.none? and not version.prerelease?
|
232
|
-
return false if version.prerelease? and
|
232
|
+
return false if version.prerelease? and
|
233
|
+
not allow_prerelease and
|
234
|
+
not prerelease?
|
233
235
|
|
234
236
|
requirement.satisfied_by? version
|
235
237
|
end
|
@@ -382,6 +382,7 @@ class Gem::DependencyInstaller
|
|
382
382
|
:force => @force,
|
383
383
|
:format_executable => @format_executable,
|
384
384
|
:ignore_dependencies => @ignore_dependencies,
|
385
|
+
:prerelease => @prerelease,
|
385
386
|
:security_policy => @security_policy,
|
386
387
|
:user_install => @user_install,
|
387
388
|
:wrappers => @wrappers,
|
@@ -423,6 +424,7 @@ class Gem::DependencyInstaller
|
|
423
424
|
request_set.development = @development
|
424
425
|
request_set.development_shallow = @dev_shallow
|
425
426
|
request_set.soft_missing = @force
|
427
|
+
request_set.prerelease = @prerelease
|
426
428
|
request_set.remote = false unless consider_remote?
|
427
429
|
|
428
430
|
installer_set = Gem::Resolver::InstallerSet.new @domain
|
data/lib/rubygems/exceptions.rb
CHANGED
@@ -27,7 +27,7 @@ class Gem::DependencyRemovalException < Gem::Exception; end
|
|
27
27
|
# toplevel. Indicates which dependencies were incompatible through #conflict
|
28
28
|
# and #conflicting_dependencies
|
29
29
|
|
30
|
-
class Gem::DependencyResolutionError < Gem::
|
30
|
+
class Gem::DependencyResolutionError < Gem::DependencyError
|
31
31
|
|
32
32
|
attr_reader :conflict
|
33
33
|
|
@@ -214,7 +214,7 @@ end
|
|
214
214
|
# Raised by Resolver when a dependency requests a gem for which
|
215
215
|
# there is no spec.
|
216
216
|
|
217
|
-
class Gem::UnsatisfiableDependencyError < Gem::
|
217
|
+
class Gem::UnsatisfiableDependencyError < Gem::DependencyError
|
218
218
|
|
219
219
|
##
|
220
220
|
# The unsatisfiable dependency. This is a
|
data/lib/rubygems/installer.rb
CHANGED
@@ -68,6 +68,8 @@ class Gem::Installer
|
|
68
68
|
|
69
69
|
@path_warning = false
|
70
70
|
|
71
|
+
@install_lock = Mutex.new
|
72
|
+
|
71
73
|
class << self
|
72
74
|
|
73
75
|
##
|
@@ -75,6 +77,12 @@ class Gem::Installer
|
|
75
77
|
|
76
78
|
attr_accessor :path_warning
|
77
79
|
|
80
|
+
##
|
81
|
+
# Certain aspects of the install process are not thread-safe. This lock is
|
82
|
+
# used to allow multiple threads to install Gems at the same time.
|
83
|
+
|
84
|
+
attr_reader :install_lock
|
85
|
+
|
78
86
|
##
|
79
87
|
# Overrides the executable format.
|
80
88
|
#
|
@@ -250,7 +258,7 @@ class Gem::Installer
|
|
250
258
|
|
251
259
|
say spec.post_install_message unless spec.post_install_message.nil?
|
252
260
|
|
253
|
-
Gem::
|
261
|
+
Gem::Installer.install_lock.synchronize { Gem::Specification.add_spec spec }
|
254
262
|
|
255
263
|
run_post_install_hooks
|
256
264
|
|
@@ -328,6 +336,7 @@ class Gem::Installer
|
|
328
336
|
# True if the gems in the system satisfy +dependency+.
|
329
337
|
|
330
338
|
def installation_satisfies_dependency?(dependency)
|
339
|
+
return true if @options[:development] and dependency.type == :development
|
331
340
|
return true if installed_specs.detect { |s| dependency.matches_spec? s }
|
332
341
|
return false if @only_install_dir
|
333
342
|
not dependency.matching_specs.empty?
|
@@ -672,14 +681,14 @@ TEXT
|
|
672
681
|
# return the stub script text used to launch the true Ruby script
|
673
682
|
|
674
683
|
def windows_stub_script(bindir, bin_file_name)
|
675
|
-
ruby =
|
684
|
+
ruby = Gem.ruby.chomp('"').tr(File::SEPARATOR, "\\")
|
676
685
|
return <<-TEXT
|
677
686
|
@ECHO OFF
|
678
687
|
IF NOT "%~f0" == "~f0" GOTO :WinNT
|
679
|
-
@"#{
|
688
|
+
@"#{ruby}" "#{File.join(bindir, bin_file_name)}" %1 %2 %3 %4 %5 %6 %7 %8 %9
|
680
689
|
GOTO :EOF
|
681
690
|
:WinNT
|
682
|
-
@"
|
691
|
+
@"#{ruby}" "%~dpn0" %*
|
683
692
|
TEXT
|
684
693
|
end
|
685
694
|
|
@@ -101,7 +101,7 @@ module Gem::LocalRemoteOptions
|
|
101
101
|
accept_uri_http
|
102
102
|
|
103
103
|
add_option(:"Local/Remote", '-s', '--source URL', URI::HTTP,
|
104
|
-
'
|
104
|
+
'Append URL to list of remote gem sources') do |source, options|
|
105
105
|
|
106
106
|
source << '/' if source !~ /\/\z/
|
107
107
|
|
data/lib/rubygems/rdoc.rb
CHANGED
@@ -47,11 +47,13 @@ class Gem::Request::ConnectionPools # :nodoc:
|
|
47
47
|
|
48
48
|
def no_proxy? host, env_no_proxy
|
49
49
|
host = host.downcase
|
50
|
-
|
50
|
+
|
51
|
+
env_no_proxy.any? do |pattern|
|
51
52
|
pattern = pattern.downcase
|
52
|
-
|
53
|
+
|
54
|
+
host[-pattern.length, pattern.length] == pattern or
|
55
|
+
(pattern.start_with? '.' and pattern[1..-1] == host)
|
53
56
|
end
|
54
|
-
return false
|
55
57
|
end
|
56
58
|
|
57
59
|
def net_http_args uri, proxy_uri
|
data/lib/rubygems/request_set.rb
CHANGED
@@ -47,6 +47,13 @@ class Gem::RequestSet
|
|
47
47
|
|
48
48
|
attr_accessor :ignore_dependencies
|
49
49
|
|
50
|
+
attr_reader :install_dir # :nodoc:
|
51
|
+
|
52
|
+
##
|
53
|
+
# If true, allow dependencies to match prerelease gems.
|
54
|
+
|
55
|
+
attr_accessor :prerelease
|
56
|
+
|
50
57
|
##
|
51
58
|
# When false no remote sets are used for resolving gems.
|
52
59
|
|
@@ -90,6 +97,7 @@ class Gem::RequestSet
|
|
90
97
|
@git_set = nil
|
91
98
|
@ignore_dependencies = false
|
92
99
|
@install_dir = Gem.dir
|
100
|
+
@prerelease = false
|
93
101
|
@remote = true
|
94
102
|
@requests = []
|
95
103
|
@sets = []
|
@@ -135,6 +143,7 @@ class Gem::RequestSet
|
|
135
143
|
end
|
136
144
|
|
137
145
|
cache_dir = options[:cache_dir] || Gem.dir
|
146
|
+
@prerelease = options[:prerelease]
|
138
147
|
|
139
148
|
requests = []
|
140
149
|
|
@@ -191,6 +200,7 @@ class Gem::RequestSet
|
|
191
200
|
gemdeps = options[:gemdeps]
|
192
201
|
|
193
202
|
@install_dir = options[:install_dir] || Gem.dir
|
203
|
+
@prerelease = options[:prerelease]
|
194
204
|
@remote = options[:domain] != :local
|
195
205
|
@conservative = true if options[:conservative]
|
196
206
|
|
@@ -234,6 +244,7 @@ class Gem::RequestSet
|
|
234
244
|
options[:development] = false
|
235
245
|
options[:install_dir] = dir
|
236
246
|
options[:only_install_dir] = true
|
247
|
+
@prerelease = options[:prerelease]
|
237
248
|
|
238
249
|
sorted_requests.each do |request|
|
239
250
|
spec = request.spec
|
@@ -273,6 +284,48 @@ class Gem::RequestSet
|
|
273
284
|
gf.load
|
274
285
|
end
|
275
286
|
|
287
|
+
def pretty_print q # :nodoc:
|
288
|
+
q.group 2, '[RequestSet:', ']' do
|
289
|
+
q.breakable
|
290
|
+
|
291
|
+
if @remote then
|
292
|
+
q.text 'remote'
|
293
|
+
q.breakable
|
294
|
+
end
|
295
|
+
|
296
|
+
if @prerelease then
|
297
|
+
q.text 'prerelease'
|
298
|
+
q.breakable
|
299
|
+
end
|
300
|
+
|
301
|
+
if @development_shallow then
|
302
|
+
q.text 'shallow development'
|
303
|
+
q.breakable
|
304
|
+
elsif @development then
|
305
|
+
q.text 'development'
|
306
|
+
q.breakable
|
307
|
+
end
|
308
|
+
|
309
|
+
if @soft_missing then
|
310
|
+
q.text 'soft missing'
|
311
|
+
end
|
312
|
+
|
313
|
+
q.group 2, '[dependencies:', ']' do
|
314
|
+
q.breakable
|
315
|
+
@dependencies.map do |dep|
|
316
|
+
q.text dep.to_s
|
317
|
+
q.breakable
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
q.breakable
|
322
|
+
q.text 'sets:'
|
323
|
+
|
324
|
+
q.breakable
|
325
|
+
q.pp @sets.map { |set| set.class }
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
276
329
|
##
|
277
330
|
# Resolve the requested dependencies and return an Array of Specification
|
278
331
|
# objects to be activated.
|
@@ -284,6 +337,7 @@ class Gem::RequestSet
|
|
284
337
|
|
285
338
|
set = Gem::Resolver.compose_sets(*@sets)
|
286
339
|
set.remote = @remote
|
340
|
+
set.prerelease = @prerelease
|
287
341
|
|
288
342
|
resolver = Gem::Resolver.new @dependencies, set
|
289
343
|
resolver.development = @development
|
@@ -338,7 +392,9 @@ class Gem::RequestSet
|
|
338
392
|
node.spec.dependencies.each do |dep|
|
339
393
|
next if dep.type == :development and not @development
|
340
394
|
|
341
|
-
match = @requests.find { |r|
|
395
|
+
match = @requests.find { |r|
|
396
|
+
dep.match? r.spec.name, r.spec.version, @prerelease
|
397
|
+
}
|
342
398
|
|
343
399
|
unless match then
|
344
400
|
next if dep.type == :development and @development_shallow
|
@@ -200,11 +200,26 @@ class Gem::RequestSet::GemDependencyAPI
|
|
200
200
|
@dependencies = {}
|
201
201
|
@default_sources = true
|
202
202
|
@git_set = @set.git_set
|
203
|
+
@git_sources = {}
|
203
204
|
@installing = false
|
204
205
|
@requires = Hash.new { |h, name| h[name] = [] }
|
205
206
|
@vendor_set = @set.vendor_set
|
206
207
|
@gem_sources = {}
|
207
208
|
@without_groups = []
|
209
|
+
|
210
|
+
git_source :github do |repo_name|
|
211
|
+
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include? "/"
|
212
|
+
|
213
|
+
"git://github.com/#{repo_name}.git"
|
214
|
+
end
|
215
|
+
|
216
|
+
git_source :bitbucket do |repo_name|
|
217
|
+
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include? "/"
|
218
|
+
|
219
|
+
user, = repo_name.split "/", 2
|
220
|
+
|
221
|
+
"https://#{user}@bitbucket.org/#{repo_name}.git"
|
222
|
+
end
|
208
223
|
end
|
209
224
|
|
210
225
|
##
|
@@ -344,9 +359,11 @@ class Gem::RequestSet::GemDependencyAPI
|
|
344
359
|
|
345
360
|
source_set = false
|
346
361
|
|
347
|
-
source_set ||= gem_path
|
348
|
-
source_set ||= gem_git
|
349
|
-
source_set ||=
|
362
|
+
source_set ||= gem_path name, options
|
363
|
+
source_set ||= gem_git name, options
|
364
|
+
source_set ||= gem_git_source name, options
|
365
|
+
|
366
|
+
duplicate = @dependencies.include? name
|
350
367
|
|
351
368
|
@dependencies[name] =
|
352
369
|
if requirements.empty? and not source_set then
|
@@ -367,6 +384,12 @@ class Gem::RequestSet::GemDependencyAPI
|
|
367
384
|
|
368
385
|
gem_requires name, options
|
369
386
|
|
387
|
+
if duplicate then
|
388
|
+
warn <<-WARNING
|
389
|
+
Gem dependencies file #{@path} requires #{name} more than once.
|
390
|
+
WARNING
|
391
|
+
end
|
392
|
+
|
370
393
|
@set.gem name, *requirements
|
371
394
|
end
|
372
395
|
|
@@ -400,21 +423,27 @@ class Gem::RequestSet::GemDependencyAPI
|
|
400
423
|
private :gem_git
|
401
424
|
|
402
425
|
##
|
403
|
-
# Handles
|
426
|
+
# Handles a git gem option from +options+ for gem +name+ for a git source
|
427
|
+
# registered through git_source.
|
404
428
|
#
|
405
|
-
# Returns +true+ if the
|
429
|
+
# Returns +true+ if the custom source option was handled.
|
406
430
|
|
407
|
-
def
|
408
|
-
return unless
|
431
|
+
def gem_git_source name, options # :nodoc:
|
432
|
+
return unless git_source = (@git_sources.keys & options.keys).last
|
409
433
|
|
410
|
-
|
434
|
+
source_callback = @git_sources[git_source]
|
435
|
+
source_param = options.delete git_source
|
436
|
+
|
437
|
+
git_url = source_callback.call source_param
|
438
|
+
|
439
|
+
options[:git] = git_url
|
411
440
|
|
412
441
|
gem_git name, options
|
413
442
|
|
414
443
|
true
|
415
444
|
end
|
416
445
|
|
417
|
-
private :
|
446
|
+
private :gem_git_source
|
418
447
|
|
419
448
|
##
|
420
449
|
# Handles the :group and :groups +options+ for the gem with the given
|
@@ -456,7 +485,8 @@ class Gem::RequestSet::GemDependencyAPI
|
|
456
485
|
# platform matches the current platform.
|
457
486
|
|
458
487
|
def gem_platforms options # :nodoc:
|
459
|
-
platform_names = Array(options.delete :
|
488
|
+
platform_names = Array(options.delete :platform)
|
489
|
+
platform_names.concat Array(options.delete :platforms)
|
460
490
|
platform_names.concat @current_platforms if @current_platforms
|
461
491
|
|
462
492
|
return true if platform_names.empty?
|
@@ -519,6 +549,15 @@ class Gem::RequestSet::GemDependencyAPI
|
|
519
549
|
@current_repository = nil
|
520
550
|
end
|
521
551
|
|
552
|
+
##
|
553
|
+
# Defines a custom git source that uses +name+ to expand git repositories
|
554
|
+
# for use in gems built from git repositories. You must provide a block
|
555
|
+
# that accepts a git repository name for expansion.
|
556
|
+
|
557
|
+
def git_source name, &callback
|
558
|
+
@git_sources[name] = callback
|
559
|
+
end
|
560
|
+
|
522
561
|
##
|
523
562
|
# Returns the basename of the file the dependencies were loaded from
|
524
563
|
|
@@ -557,8 +596,17 @@ class Gem::RequestSet::GemDependencyAPI
|
|
557
596
|
|
558
597
|
groups = gem_group spec.name, {}
|
559
598
|
|
599
|
+
self_dep = Gem::Dependency.new spec.name, spec.version
|
600
|
+
|
601
|
+
add_dependencies groups, [self_dep]
|
560
602
|
add_dependencies groups, spec.runtime_dependencies
|
561
603
|
|
604
|
+
@dependencies[spec.name] = '!'
|
605
|
+
|
606
|
+
spec.dependencies.each do |dep|
|
607
|
+
@dependencies[dep.name] = dep.requirement
|
608
|
+
end
|
609
|
+
|
562
610
|
groups << development_group
|
563
611
|
|
564
612
|
add_dependencies groups, spec.development_dependencies
|