rubygems-update 0.9.5 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rubygems-update might be problematic. Click here for more details.
- data/ChangeLog +135 -0
- data/Rakefile +3 -1
- data/lib/rubygems.rb +27 -38
- data/lib/rubygems/commands/install_command.rb +2 -0
- data/lib/rubygems/commands/mirror_command.rb +8 -2
- data/lib/rubygems/commands/query_command.rb +3 -1
- data/lib/rubygems/commands/server_command.rb +3 -3
- data/lib/rubygems/commands/unpack_command.rb +11 -4
- data/lib/rubygems/commands/update_command.rb +114 -108
- data/lib/rubygems/defaults.rb +46 -0
- data/lib/rubygems/dependency_installer.rb +13 -2
- data/lib/rubygems/indexer.rb +1 -1
- data/lib/rubygems/install_update_options.rb +7 -0
- data/lib/rubygems/installer.rb +66 -11
- data/lib/rubygems/package.rb +2 -1
- data/lib/rubygems/platform.rb +24 -30
- data/lib/rubygems/remote_fetcher.rb +7 -3
- data/lib/rubygems/require_paths_builder.rb +15 -0
- data/lib/rubygems/rubygems_version.rb +1 -1
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/server.rb +18 -3
- data/lib/rubygems/source_index.rb +20 -23
- data/lib/rubygems/source_info_cache.rb +3 -3
- data/lib/rubygems/specification.rb +64 -31
- data/lib/rubygems/uninstaller.rb +1 -1
- data/lib/rubygems/validator.rb +3 -2
- data/lib/rubygems/version.rb +10 -3
- data/setup.rb +30 -6
- data/test/gemutilities.rb +23 -13
- data/test/gemutilities.rbc +0 -0
- data/test/mockgemui.rbc +0 -0
- data/test/test_gem.rb +46 -76
- data/test/test_gem.rbc +0 -0
- data/test/test_gem_commands_build_command.rb +12 -12
- data/test/test_gem_commands_dependency_command.rb +10 -10
- data/test/test_gem_commands_mirror_command.rb +9 -4
- data/test/test_gem_commands_query_command.rb +7 -3
- data/test/test_gem_commands_server_command.rb +27 -0
- data/test/test_gem_commands_unpack_command.rb +20 -2
- data/test/test_gem_format.rb +1 -1
- data/test/test_gem_indexer.rb +5 -5
- data/test/test_gem_install_update_options.rb +1 -1
- data/test/test_gem_installer.rb +149 -60
- data/test/test_gem_platform.rb +19 -0
- data/test/test_gem_remote_fetcher.rb +19 -2
- data/test/test_gem_server.rb +44 -1
- data/test/test_gem_source_index.rb +2 -2
- data/test/test_gem_specification.rb +300 -168
- data/test/test_gem_version.rb +15 -0
- data/test/test_kernel.rb +19 -19
- metadata +46 -42
- data/lib/rubygems/remote_installer.rb +0 -195
- data/test/test_gem_remote_installer.rb +0 -161
data/ChangeLog
CHANGED
@@ -1,3 +1,138 @@
|
|
1
|
+
2007-12-19 Eric Hodel <drbrain@segment7.net>
|
2
|
+
|
3
|
+
* lib/rubygems/installer.rb: Revert change that only wrapped
|
4
|
+
executables with #!.
|
5
|
+
* lib/rubygems/specification.rb: Warn about a lot of things that
|
6
|
+
could be wrong with gemspecs on build, including missing #!. Use
|
7
|
+
'x86-mswin32' for legacy 'mswin32' platform, fix CURRENT platform.
|
8
|
+
Paired with Luis Lavena.
|
9
|
+
* lib/rubygems/remote_installer.rb: Deleted.
|
10
|
+
* lib/rubygems.rb: Removed Kernel#require_gem.
|
11
|
+
* doc/release_notes/rel_1_0_0.rdoc: RubyGems 1.0 release notes.
|
12
|
+
* lib/rubygems/rubygems_version.rb: 1.0.0.
|
13
|
+
|
14
|
+
2007-12-18 Luis Lavena <luislavena@gmail.com>
|
15
|
+
|
16
|
+
* lib/rubygems/commands/mirror_command.rb: Work around URI::parse
|
17
|
+
processing file:// scheme and drive paths on Windows.
|
18
|
+
* test/test_gem_commands_mirror_command.rb: ditto.
|
19
|
+
|
20
|
+
2007-12-17 Eric Hodel <drbrain@segment7.net>
|
21
|
+
|
22
|
+
* lib/rubygems/installer.rb: Copy files into bindir if they don't
|
23
|
+
have a shebang. Bug reported by Luis Lavena.
|
24
|
+
* lib/rubygems/server.rb: Handle platforms in Gem::Server#quick.
|
25
|
+
Exactly match gem names. Bugs reported by Chad Woolley.
|
26
|
+
* lib/rubygems/platform.rb: Remove platform constants in favor of
|
27
|
+
Gem::Platform::CURRENT. Bug reported by Luis Lavena.
|
28
|
+
* lib/rubygems/dependency_installer.rb: Work around Dir::glob not
|
29
|
+
understanding File::ALT_SEPARATOR. Bug submitted by Luis Lavena.
|
30
|
+
|
31
|
+
2007-12-16 Eric Hodel <drbrain@segment7.net>
|
32
|
+
|
33
|
+
* lib/rubygems/remote_fetcher.rb: Be more verbose in error messages
|
34
|
+
from OpenURI.
|
35
|
+
* lib/rubygems/server.rb: Be more verbose in error/missing responses.
|
36
|
+
|
37
|
+
2007-12-15 Eric Hodel <drbrain@segment7.net>
|
38
|
+
|
39
|
+
* lib/rubygems/installer.rb: Output extension build results when
|
40
|
+
really verbose. From bug #15853 John Croisant.
|
41
|
+
* lib/rubygems/specification.rb: Fix backwards compatibility with
|
42
|
+
0.9.4, don't allow the platform to be nil or an empty string. Bug
|
43
|
+
#16177 by Dan Manges.
|
44
|
+
* setup.rb: Re-exec setup.rb if rubygems is loaded and RUBYOPT is
|
45
|
+
set. Fixes bug #15974 by Joshua Sierles.
|
46
|
+
* lib/rubygems/update_command.rb: Tweak formatting of updated
|
47
|
+
message. Bug #15625 by Bil Kleb.
|
48
|
+
* lib/rubygems/remote_fetcher.rb: Add URI to exception message for
|
49
|
+
Gem::RemoteFetcher#fetch_size. Bug #14801 by Bil Kleb.
|
50
|
+
|
51
|
+
2007-12-14 Eric Hodel <drbrain@segment7.net>
|
52
|
+
|
53
|
+
* lib/rubygems/commands/query_command.rb: Don't display duplicate
|
54
|
+
version numbers. Bug #15828 by Tim Fletcher.
|
55
|
+
* setup.rb: Fix my stupidity with --help. Patch #16308 by Stephen
|
56
|
+
Bannasch. Fix --prefix= argument. Bug #16002 by Piglop.
|
57
|
+
|
58
|
+
2007-12-13 Eric Hodel <drbrain@segment7.net>
|
59
|
+
|
60
|
+
* lib/rubygems/commands/server_command.rb: Fix --no-daemon. Bug by
|
61
|
+
Chad Woolley.
|
62
|
+
* lib/rubygems/server.rb: Fix Marshal quick index. Bug by Chad
|
63
|
+
Woolley.
|
64
|
+
* lib/rubygems/installer.rb: Respect Gem::Specification#bindir. Bug
|
65
|
+
#16202 by Suraj Kurapati.
|
66
|
+
* lib/rubygems/commands/update_command.rb: Fix `gem update mysql`.
|
67
|
+
Bug #16244 by Stephen Bannasch.
|
68
|
+
|
69
|
+
2007-12-12 Eric Hodel <drbrain@segment7.net>
|
70
|
+
|
71
|
+
* lib/rubygems/installer.rb: Add --format-executable option to
|
72
|
+
install executables with ruby's program-suffix and prefix. Patch
|
73
|
+
#14688 by Jeremy Kemper. Also, installing in really-verbose mode
|
74
|
+
prints out written files.
|
75
|
+
* setup.rb: Add --format-executable option to install gem with ruby's
|
76
|
+
program-suffix and prefix. Add --help. Fixes bug #16056 by Chad
|
77
|
+
Woolley.
|
78
|
+
* lib/rubygems/uninstaller.rb: Fallback to original_platform_name
|
79
|
+
correctly. Patch #15960 by Nicola Piccinini's friend.
|
80
|
+
|
81
|
+
2007-12-11 Eric Hodel <drbrain@segment7.net>
|
82
|
+
|
83
|
+
* lib/rubygems/validator.rb: Correct test run failures when no tests
|
84
|
+
are provided. Patch #15701 by Jérémy Zurcher.
|
85
|
+
* lib/rubygems/commands/mirror_command.rb: Don't File.join a
|
86
|
+
URI::HTTP. Patch #16116 by Morgan Nelson.
|
87
|
+
* lib/rubygems/commands/unpack_command.rb: Add --target option to
|
88
|
+
`gem unpack`. Patch #16154 by Kevin Barnes.
|
89
|
+
|
90
|
+
2007-12-10 Eric Hodel <drbrain@segment7.net>
|
91
|
+
|
92
|
+
* lib/rubygems/dependency_installer.rb: Revert to nil for the default
|
93
|
+
security policy to avoid requiring OpenSSL.
|
94
|
+
* lib/rubygems/defaults.rb: Consolidate defaults for easier editing.
|
95
|
+
Patch #15150 by Donavan Pantke.
|
96
|
+
|
97
|
+
2007-11-27 Eric Hodel <drbrain@segment7.net>
|
98
|
+
|
99
|
+
* lib/rubygems/source_index.rb: Remove dependency on forwadable.
|
100
|
+
Patch by Koichi Sasada.
|
101
|
+
* lib/rubygems/specification.rb: Reduce dependency on time.rb. Patch
|
102
|
+
by Koichi Sasada.
|
103
|
+
|
104
|
+
2007-11-26 Rich Kilmer <rich@infoether.com>
|
105
|
+
|
106
|
+
* lib/rubygems/version.rb: Fix bug 15948 with version bump
|
107
|
+
* test/test_gem_version.rb: Test for bug 15948 with version bump
|
108
|
+
* util/gem_prelude.rb: wrap init code with exception handler
|
109
|
+
and skip badly formed directory names
|
110
|
+
|
111
|
+
2007-11-23 Rich Kilmer <rich@infoether.com>
|
112
|
+
|
113
|
+
* lib/rubygems.rb: Centralize all CONFIG options into Hash
|
114
|
+
Gem::ConfigMap with keys as symbols, change all references
|
115
|
+
to CONFIG to ConfigMap
|
116
|
+
* lib/rubygems/require_paths_builder.rb: Added to support
|
117
|
+
building .require_paths file
|
118
|
+
* lib/rubygems/installer.rb: Add building of .require_paths if
|
119
|
+
needed
|
120
|
+
* lib/rubygems/platform.rb: Use new ConfigMap hash for arch
|
121
|
+
* lib/rubygems
|
122
|
+
* util/gem_prelude.rb: new gem prelude for Ruby 1.9
|
123
|
+
* test/test_gem_installer.rb: change to use ConfigMap hash
|
124
|
+
* test/gemutilities.rb: change to use ConfigMap hash
|
125
|
+
|
126
|
+
2007-11-21 Daniel Berger <djberg96@gmail.com>
|
127
|
+
|
128
|
+
* lib/rubygems/platform.rb: Gem::Platform.new now returns
|
129
|
+
Gem::Platform.local if the arch matches Gem::Platform::CURRENT.
|
130
|
+
Bugs #15815 and #15782 submitted by Daniel Berger.
|
131
|
+
|
132
|
+
2007-11-20 Eric Hodel <drbrain@segment7.net>
|
133
|
+
|
134
|
+
* lib/rubygems/platform.rb: Handle bare 'mswin32' platform's CPU.
|
135
|
+
|
1
136
|
2007-11-19 Eric Hodel <drbrain@segment7.net>
|
2
137
|
|
3
138
|
* lib/rubygems/rubygems_version.rb: 0.9.5.
|
data/Rakefile
CHANGED
@@ -384,13 +384,14 @@ task :update_ruby do
|
|
384
384
|
sh "rsync #{options} bin/gem #{ruby_dir}/bin/gem"
|
385
385
|
sh "rsync #{options} lib/ #{ruby_dir}/lib"
|
386
386
|
sh "rsync #{options} test/ #{ruby_dir}/test/rubygems"
|
387
|
+
sh "rsync #{options} util/gem_prelude.rb #{ruby_dir}/gem_prelude.rb"
|
387
388
|
end
|
388
389
|
|
389
390
|
desc "Diffs Ruby HEAD with the currently checked-out copy of RubyGems."
|
390
391
|
task :diff_ruby do
|
391
392
|
ruby_dir = ENV['RUBY_PATH'] || '../../ruby/trunk'
|
392
393
|
|
393
|
-
options = "-urpN --exclude '*svn*' --exclude '*swp'"
|
394
|
+
options = "-urpN --exclude '*svn*' --exclude '*swp' --exclude '*rbc'"
|
394
395
|
|
395
396
|
sh "diff #{options} bin/gem #{ruby_dir}/bin/gem; true"
|
396
397
|
sh "diff #{options} lib/ubygems.rb #{ruby_dir}/lib/ubygems.rb; true"
|
@@ -398,5 +399,6 @@ task :diff_ruby do
|
|
398
399
|
sh "diff #{options} lib/rubygems #{ruby_dir}/lib/rubygems; true"
|
399
400
|
sh "diff #{options} lib/rbconfig #{ruby_dir}/lib/rbconfig; true"
|
400
401
|
sh "diff #{options} test #{ruby_dir}/test/rubygems; true"
|
402
|
+
sh "diff #{options} util/gem_prelude.rb #{ruby_dir}/gem_prelude.rb; true"
|
401
403
|
end
|
402
404
|
|
data/lib/rubygems.rb
CHANGED
@@ -5,8 +5,8 @@
|
|
5
5
|
# See LICENSE.txt for permissions.
|
6
6
|
#++
|
7
7
|
|
8
|
-
require 'rbconfig'
|
9
8
|
require 'rubygems/rubygems_version'
|
9
|
+
require 'rubygems/defaults'
|
10
10
|
require 'thread'
|
11
11
|
|
12
12
|
module Gem
|
@@ -30,8 +30,8 @@ module Kernel
|
|
30
30
|
# version).
|
31
31
|
#
|
32
32
|
# You can define the environment variable GEM_SKIP as a way to not
|
33
|
-
# load specified gems.
|
34
|
-
# haven't been
|
33
|
+
# load specified gems. You might do this to test out changes that
|
34
|
+
# haven't been installed yet. Example:
|
35
35
|
#
|
36
36
|
# GEM_SKIP=libA:libB ruby-I../libA -I../libB ./mycode.rb
|
37
37
|
#
|
@@ -50,17 +50,6 @@ module Kernel
|
|
50
50
|
active_gem_with_options(gem_name, version_requirements)
|
51
51
|
end
|
52
52
|
|
53
|
-
# Same as the +gem+ command, but will also require a file if the gem
|
54
|
-
# provides an auto-required file name.
|
55
|
-
#
|
56
|
-
# DEPRECATED! Use +gem+ instead.
|
57
|
-
#
|
58
|
-
def require_gem(gem_name, *version_requirements)
|
59
|
-
file, lineno = location_of_caller
|
60
|
-
warn "#{file}:#{lineno}:Warning: require_gem is obsolete. Use gem instead."
|
61
|
-
active_gem_with_options(gem_name, version_requirements, :auto_require=>true)
|
62
|
-
end
|
63
|
-
|
64
53
|
# Return the file name (string) and line number (integer) of the caller of
|
65
54
|
# the caller of this method.
|
66
55
|
def location_of_caller
|
@@ -82,11 +71,27 @@ end
|
|
82
71
|
#
|
83
72
|
module Gem
|
84
73
|
|
74
|
+
ConfigMap = {} unless defined?(ConfigMap)
|
75
|
+
require 'rbconfig'
|
76
|
+
ConfigMap.merge!(
|
77
|
+
:BASERUBY => RbConfig::CONFIG["BASERUBY"],
|
78
|
+
:EXEEXT => RbConfig::CONFIG["EXEEXT"],
|
79
|
+
:RUBY_INSTALL_NAME => RbConfig::CONFIG["RUBY_INSTALL_NAME"],
|
80
|
+
:RUBY_SO_NAME => RbConfig::CONFIG["RUBY_SO_NAME"],
|
81
|
+
:arch => RbConfig::CONFIG["arch"],
|
82
|
+
:bindir => RbConfig::CONFIG["bindir"],
|
83
|
+
:libdir => RbConfig::CONFIG["libdir"],
|
84
|
+
:ruby_install_name => RbConfig::CONFIG["ruby_install_name"],
|
85
|
+
:ruby_version => RbConfig::CONFIG["ruby_version"],
|
86
|
+
:sitedir => RbConfig::CONFIG["sitedir"],
|
87
|
+
:sitelibdir => RbConfig::CONFIG["sitelibdir"]
|
88
|
+
)
|
89
|
+
|
85
90
|
MUTEX = Mutex.new
|
86
91
|
|
87
92
|
RubyGemsPackageVersion = RubyGemsVersion
|
88
93
|
|
89
|
-
DIRECTORIES = %w[cache doc gems specifications]
|
94
|
+
DIRECTORIES = %w[cache doc gems specifications] unless defined?(DIRECTORIES)
|
90
95
|
|
91
96
|
@@source_index = nil
|
92
97
|
@@win_platform = nil
|
@@ -120,7 +125,7 @@ module Gem
|
|
120
125
|
|
121
126
|
def self.prefix
|
122
127
|
prefix = File.dirname File.expand_path(__FILE__)
|
123
|
-
if prefix ==
|
128
|
+
if prefix == ConfigMap[:sitelibdir] then
|
124
129
|
nil
|
125
130
|
else
|
126
131
|
File.dirname prefix
|
@@ -194,10 +199,6 @@ module Gem
|
|
194
199
|
@sources
|
195
200
|
end
|
196
201
|
|
197
|
-
# An Array of the default sources that come with RubyGems.
|
198
|
-
def default_sources
|
199
|
-
%w[http://gems.rubyforge.org]
|
200
|
-
end
|
201
202
|
|
202
203
|
# Provide an alias for the old name.
|
203
204
|
alias cache source_index
|
@@ -221,7 +222,7 @@ module Gem
|
|
221
222
|
if defined? RUBY_FRAMEWORK_VERSION then # mac framework support
|
222
223
|
'/usr/bin'
|
223
224
|
else # generic install
|
224
|
-
|
225
|
+
ConfigMap[:bindir]
|
225
226
|
end
|
226
227
|
end
|
227
228
|
|
@@ -280,9 +281,9 @@ module Gem
|
|
280
281
|
# Return the Ruby command to use to execute the Ruby interpreter.
|
281
282
|
def ruby
|
282
283
|
if @ruby.nil? then
|
283
|
-
@ruby = File.join(
|
284
|
-
|
285
|
-
@ruby <<
|
284
|
+
@ruby = File.join(ConfigMap[:bindir],
|
285
|
+
ConfigMap[:ruby_install_name])
|
286
|
+
@ruby << ConfigMap[:EXEEXT]
|
286
287
|
end
|
287
288
|
|
288
289
|
@ruby
|
@@ -342,7 +343,7 @@ module Gem
|
|
342
343
|
File.join spec.full_gem_path, path
|
343
344
|
end
|
344
345
|
|
345
|
-
sitelibdir =
|
346
|
+
sitelibdir = ConfigMap[:sitelibdir]
|
346
347
|
|
347
348
|
# gem directories must come after -I and ENV['RUBYLIB']
|
348
349
|
$:.insert($:.index(sitelibdir), *require_paths)
|
@@ -523,18 +524,6 @@ module Gem
|
|
523
524
|
end
|
524
525
|
end
|
525
526
|
|
526
|
-
public
|
527
|
-
|
528
|
-
# Default home directory path to be used if an alternate value is
|
529
|
-
# not specified in the environment.
|
530
|
-
def default_dir
|
531
|
-
if defined? RUBY_FRAMEWORK_VERSION
|
532
|
-
return File.join(File.dirname(Config::CONFIG["sitedir"]), "Gems", Config::CONFIG['ruby_version'])
|
533
|
-
else
|
534
|
-
File.join(Config::CONFIG['libdir'], 'ruby', 'gems', Config::CONFIG['ruby_version'])
|
535
|
-
end
|
536
|
-
end
|
537
|
-
|
538
527
|
end
|
539
528
|
|
540
529
|
end
|
@@ -549,7 +538,7 @@ module Config # :nodoc:
|
|
549
538
|
# Return the path to the data directory associated with the named
|
550
539
|
# package. If the package is loaded as a gem, return the gem
|
551
540
|
# specific data directory. Otherwise return a path to the share
|
552
|
-
# area as define by "#{
|
541
|
+
# area as define by "#{ConfigMap[:datadir]}/#{package_name}".
|
553
542
|
def datadir(package_name)
|
554
543
|
Gem.datadir(package_name) || Config.gem_original_datadir(package_name)
|
555
544
|
end
|
@@ -17,6 +17,7 @@ class Gem::Commands::InstallCommand < Gem::Command
|
|
17
17
|
:generate_rdoc => true,
|
18
18
|
:generate_ri => true,
|
19
19
|
:install_dir => Gem.dir,
|
20
|
+
:format_executable => false,
|
20
21
|
:test => false,
|
21
22
|
:version => Gem::Requirement.default,
|
22
23
|
})
|
@@ -56,6 +57,7 @@ class Gem::Commands::InstallCommand < Gem::Command
|
|
56
57
|
:env_shebang => options[:env_shebang],
|
57
58
|
:domain => options[:domain],
|
58
59
|
:force => options[:force],
|
60
|
+
:format_executable => options[:format_executable],
|
59
61
|
:ignore_dependencies => options[:ignore_dependencies],
|
60
62
|
:install_dir => options[:install_dir],
|
61
63
|
:security_policy => options[:security_policy],
|
@@ -60,10 +60,16 @@ Multiple sources and destinations may be specified.
|
|
60
60
|
if get_from.scheme.nil? then
|
61
61
|
get_from = get_from.to_s
|
62
62
|
elsif get_from.scheme == 'file' then
|
63
|
-
|
63
|
+
# check if specified URI contains a drive letter (file:/D:/Temp)
|
64
|
+
get_from = get_from.to_s
|
65
|
+
get_from = if get_from =~ /^file:.*[a-z]:/i then
|
66
|
+
get_from[6..-1]
|
67
|
+
else
|
68
|
+
get_from[5..-1]
|
69
|
+
end
|
64
70
|
end
|
65
71
|
|
66
|
-
open File.join(get_from, "Marshal.#{Gem.marshal_version}.Z"), "rb" do |y|
|
72
|
+
open File.join(get_from.to_s, "Marshal.#{Gem.marshal_version}.Z"), "rb" do |y|
|
67
73
|
sourceindex_data = Zlib::Inflate.inflate y.read
|
68
74
|
open File.join(save_to, "Marshal.#{Gem.marshal_version}"), "wb" do |out|
|
69
75
|
out.write sourceindex_data
|
@@ -82,8 +82,10 @@ class Gem::Commands::QueryCommand < Gem::Command
|
|
82
82
|
end
|
83
83
|
|
84
84
|
entry = gem_name.dup
|
85
|
+
|
85
86
|
if options[:versions] then
|
86
|
-
|
87
|
+
versions = list_of_matching.map { |s| s.version }.uniq
|
88
|
+
entry << " (#{versions.join ', '})"
|
87
89
|
end
|
88
90
|
|
89
91
|
entry << "\n" << format_text(list_of_matching[0].summary, 68, 4) if
|
@@ -7,17 +7,17 @@ class Gem::Commands::ServerCommand < Gem::Command
|
|
7
7
|
super 'server', 'Documentation and gem repository HTTP server',
|
8
8
|
:port => 8808, :gemdir => Gem.dir, :daemon => false
|
9
9
|
|
10
|
-
add_option '-p', '--port=PORT',
|
10
|
+
add_option '-p', '--port=PORT', Integer,
|
11
11
|
'port to listen on' do |port, options|
|
12
12
|
options[:port] = port
|
13
13
|
end
|
14
14
|
|
15
15
|
add_option '-d', '--dir=GEMDIR',
|
16
16
|
'directory from which to serve gems' do |gemdir, options|
|
17
|
-
options[:gemdir] = gemdir
|
17
|
+
options[:gemdir] = File.expand_path gemdir
|
18
18
|
end
|
19
19
|
|
20
|
-
add_option '--[no]
|
20
|
+
add_option '--[no-]daemon', 'run as a daemon' do |daemon, options|
|
21
21
|
options[:daemon] = daemon
|
22
22
|
end
|
23
23
|
end
|
@@ -9,7 +9,13 @@ class Gem::Commands::UnpackCommand < Gem::Command
|
|
9
9
|
|
10
10
|
def initialize
|
11
11
|
super 'unpack', 'Unpack an installed gem to the current directory',
|
12
|
-
:version => Gem::Requirement.default
|
12
|
+
:version => Gem::Requirement.default,
|
13
|
+
:target => Dir.pwd
|
14
|
+
|
15
|
+
add_option('--target', 'target directory for unpacking') do |value, options|
|
16
|
+
options[:target] = value
|
17
|
+
end
|
18
|
+
|
13
19
|
add_version_option
|
14
20
|
end
|
15
21
|
|
@@ -32,10 +38,11 @@ class Gem::Commands::UnpackCommand < Gem::Command
|
|
32
38
|
def execute
|
33
39
|
gemname = get_one_gem_name
|
34
40
|
path = get_path(gemname, options[:version])
|
35
|
-
if path
|
36
|
-
|
41
|
+
if path then
|
42
|
+
basename = File.basename(path).sub(/\.gem$/, '')
|
43
|
+
target_dir = File.expand_path File.join(options[:target], basename)
|
37
44
|
FileUtils.mkdir_p target_dir
|
38
|
-
Gem::Installer.new(path).unpack
|
45
|
+
Gem::Installer.new(path).unpack target_dir
|
39
46
|
say "Unpacked gem: '#{target_dir}'"
|
40
47
|
else
|
41
48
|
alert_error "Gem '#{gemname}' not installed."
|
@@ -4,146 +4,152 @@ require 'rubygems/local_remote_options'
|
|
4
4
|
require 'rubygems/source_info_cache'
|
5
5
|
require 'rubygems/version_option'
|
6
6
|
|
7
|
-
|
8
|
-
module Commands
|
9
|
-
class UpdateCommand < Command
|
7
|
+
class Gem::Commands::UpdateCommand < Gem::Command
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
include Gem::InstallUpdateOptions
|
10
|
+
include Gem::LocalRemoteOptions
|
11
|
+
include Gem::VersionOption
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
'update',
|
13
|
+
def initialize
|
14
|
+
super 'update',
|
18
15
|
'Update the named gems (or all installed gems) in the local repository',
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
:install_dir => Gem.dir
|
25
|
-
})
|
26
|
-
|
27
|
-
add_install_update_options
|
28
|
-
|
29
|
-
add_option('--system',
|
30
|
-
'Update the RubyGems system software') do |value, options|
|
31
|
-
options[:system] = value
|
32
|
-
end
|
16
|
+
:generate_rdoc => true,
|
17
|
+
:generate_ri => true,
|
18
|
+
:force => false,
|
19
|
+
:test => false,
|
20
|
+
:install_dir => Gem.dir
|
33
21
|
|
34
|
-
|
22
|
+
add_install_update_options
|
35
23
|
|
36
|
-
|
37
|
-
|
24
|
+
add_option('--system',
|
25
|
+
'Update the RubyGems system software') do |value, options|
|
26
|
+
options[:system] = value
|
27
|
+
end
|
38
28
|
|
39
|
-
|
40
|
-
"GEMNAME name of gem to update"
|
41
|
-
end
|
29
|
+
add_local_remote_options
|
42
30
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
31
|
+
add_platform_option
|
32
|
+
end
|
33
|
+
|
34
|
+
def arguments # :nodoc:
|
35
|
+
"GEMNAME name of gem to update"
|
36
|
+
end
|
47
37
|
|
48
|
-
|
49
|
-
|
38
|
+
def defaults_str # :nodoc:
|
39
|
+
"--rdoc --ri --no-force --no-test --install-dir #{Gem.dir}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def usage # :nodoc:
|
43
|
+
"#{program_name} GEMNAME [GEMNAME ...]"
|
44
|
+
end
|
45
|
+
|
46
|
+
def execute
|
47
|
+
if options[:system] then
|
48
|
+
say "Updating RubyGems..."
|
49
|
+
|
50
|
+
unless options[:args].empty? then
|
51
|
+
fail "No gem names are allowed with the --system option"
|
50
52
|
end
|
51
53
|
|
52
|
-
|
53
|
-
|
54
|
-
|
54
|
+
options[:args] = ["rubygems-update"]
|
55
|
+
else
|
56
|
+
say "Updating installed gems..."
|
57
|
+
end
|
55
58
|
|
56
|
-
|
57
|
-
fail "No gem names are allowed with the --system option"
|
58
|
-
end
|
59
|
+
hig = highest_installed_gems = {}
|
59
60
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
Gem::SourceIndex.from_installed_gems.each do |name, spec|
|
62
|
+
if hig[spec.name].nil? or hig[spec.name].version < spec.version then
|
63
|
+
hig[spec.name] = spec
|
64
|
+
end
|
65
|
+
end
|
64
66
|
|
65
|
-
|
67
|
+
remote_gemspecs = Gem::SourceInfoCache.search(//)
|
66
68
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
69
|
+
gems_to_update = if options[:args].empty? then
|
70
|
+
which_to_update(highest_installed_gems, remote_gemspecs)
|
71
|
+
else
|
72
|
+
options[:args]
|
73
|
+
end
|
72
74
|
|
73
|
-
|
75
|
+
options[:domain] = :remote # install from remote source
|
74
76
|
|
75
|
-
|
76
|
-
|
77
|
-
else
|
78
|
-
options[:args]
|
79
|
-
end
|
77
|
+
# HACK use the real API
|
78
|
+
install_command = Gem::CommandManager.instance['install']
|
80
79
|
|
81
|
-
|
80
|
+
gems_to_update.uniq.sort.each do |name|
|
81
|
+
say "Attempting remote update of #{name}"
|
82
|
+
options[:args] = [name]
|
83
|
+
options[:ignore_dependencies] = true # HACK skip seen gems instead
|
84
|
+
install_command.merge_options(options)
|
85
|
+
install_command.execute
|
86
|
+
end
|
82
87
|
|
83
|
-
|
84
|
-
|
88
|
+
if gems_to_update.include? "rubygems-update" then
|
89
|
+
latest_ruby_gem = remote_gemspecs.select do |s|
|
90
|
+
s.name == 'rubygems-update'
|
91
|
+
end
|
85
92
|
|
86
|
-
|
87
|
-
say "Attempting remote update of #{name}"
|
88
|
-
options[:args] = [name]
|
89
|
-
options[:ignore_dependencies] = true # HACK skip seen gems instead
|
90
|
-
install_command.merge_options(options)
|
91
|
-
install_command.execute
|
92
|
-
end
|
93
|
+
latest_ruby_gem = latest_ruby_gem.sort_by { |s| s.version }.last
|
93
94
|
|
94
|
-
|
95
|
-
|
96
|
-
s.name == 'rubygems-update'
|
97
|
-
}.sort_by { |s|
|
98
|
-
s.version
|
99
|
-
}.last
|
95
|
+
say "Updating version of RubyGems to #{latest_ruby_gem.version}"
|
96
|
+
installed = do_rubygems_update latest_ruby_gem.version
|
100
97
|
|
101
|
-
|
102
|
-
|
98
|
+
say "RubyGems system software updated" if installed
|
99
|
+
else
|
100
|
+
updated = gems_to_update.uniq.sort.collect { |g| g.to_s }
|
103
101
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
102
|
+
if updated.empty? then
|
103
|
+
say "Nothing to update"
|
104
|
+
else
|
105
|
+
say "Gems updated: #{updated.join ', '}"
|
108
106
|
end
|
107
|
+
end
|
108
|
+
end
|
109
109
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
110
|
+
def do_rubygems_update(version)
|
111
|
+
args = []
|
112
|
+
args.push '--prefix', Gem.prefix unless Gem.prefix.nil?
|
113
|
+
args << '--no-rdoc' unless options[:generate_rdoc]
|
114
|
+
args << '--no-ri' unless options[:generate_ri]
|
115
115
|
|
116
|
-
|
117
|
-
"rubygems-update-#{version_string}")
|
116
|
+
update_dir = File.join Gem.dir, 'gems', "rubygems-update-#{version}"
|
118
117
|
|
119
|
-
|
118
|
+
success = false
|
120
119
|
|
121
|
-
|
122
|
-
|
123
|
-
|
120
|
+
Dir.chdir update_dir do
|
121
|
+
say "Installing RubyGems #{version}"
|
122
|
+
setup_cmd = "#{Gem.ruby} setup.rb #{args.join ' '}"
|
124
123
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
end
|
131
|
-
end
|
124
|
+
# Make sure old rubygems isn't loaded
|
125
|
+
if Gem.win_platform? then
|
126
|
+
system "set RUBYOPT= & #{setup_cmd}"
|
127
|
+
else
|
128
|
+
system "RUBYOPT=\"\" #{setup_cmd}"
|
132
129
|
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def which_to_update(highest_installed_gems, remote_gemspecs)
|
134
|
+
result = []
|
133
135
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
remote_gemspecs.select { |spec| spec.name == l_name }.
|
139
|
-
sort_by { |spec| spec.version }.
|
140
|
-
last
|
141
|
-
if highest_remote_gem and l_spec.version < highest_remote_gem.version
|
142
|
-
result << l_name
|
143
|
-
end
|
136
|
+
highest_installed_gems.each do |l_name, l_spec|
|
137
|
+
matching_gems = remote_gemspecs.select do |spec|
|
138
|
+
spec.name == l_name and Gem.platforms.any? do |platform|
|
139
|
+
platform == spec.platform
|
144
140
|
end
|
145
|
-
|
141
|
+
end
|
142
|
+
|
143
|
+
highest_remote_gem = matching_gems.sort_by { |spec| spec.version }.last
|
144
|
+
|
145
|
+
if highest_remote_gem and
|
146
|
+
l_spec.version < highest_remote_gem.version then
|
147
|
+
result << l_name
|
146
148
|
end
|
147
149
|
end
|
150
|
+
|
151
|
+
result
|
148
152
|
end
|
153
|
+
|
149
154
|
end
|
155
|
+
|