rubygems-update 0.9.5 → 1.0.0
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.
- 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
|
+
|