rubygems-update 0.9.2 → 0.9.3
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 +60 -0
- data/lib/rubygems.rb +18 -15
- data/lib/rubygems/builder.rb +29 -23
- data/lib/rubygems/{cmd_manager.rb → command_manager.rb} +35 -24
- data/lib/rubygems/commands/build_command.rb +57 -0
- data/lib/rubygems/commands/cert_command.rb +83 -0
- data/lib/rubygems/commands/check_command.rb +74 -0
- data/lib/rubygems/commands/cleanup_command.rb +75 -0
- data/lib/rubygems/commands/contents_command.rb +66 -0
- data/lib/rubygems/commands/dependency_command.rb +105 -0
- data/lib/rubygems/commands/environment_command.rb +59 -0
- data/lib/rubygems/commands/help_command.rb +82 -0
- data/lib/rubygems/commands/install_command.rb +139 -0
- data/lib/rubygems/commands/list_command.rb +33 -0
- data/lib/rubygems/commands/outdated_command.rb +21 -0
- data/lib/rubygems/commands/pristine_command.rb +103 -0
- data/lib/rubygems/commands/query_command.rb +86 -0
- data/lib/rubygems/commands/rdoc_command.rb +75 -0
- data/lib/rubygems/commands/search_command.rb +35 -0
- data/lib/rubygems/commands/sources_command.rb +73 -0
- data/lib/rubygems/commands/specification_command.rb +58 -0
- data/lib/rubygems/commands/uninstall_command.rb +51 -0
- data/lib/rubygems/commands/unpack_command.rb +76 -0
- data/lib/rubygems/commands/update_command.rb +102 -0
- data/lib/rubygems/digest/digest_adapter.rb +40 -0
- data/lib/rubygems/digest/md5.rb +20 -0
- data/lib/rubygems/digest/sha1.rb +17 -0
- data/lib/rubygems/digest/sha2.rb +17 -0
- data/lib/rubygems/format.rb +1 -1
- data/lib/rubygems/gem_commands.rb +6 -1407
- data/lib/rubygems/gem_runner.rb +2 -2
- data/lib/rubygems/installer.rb +13 -5
- data/lib/rubygems/open-uri.rb +2 -2
- data/lib/rubygems/package.rb +13 -14
- data/lib/rubygems/rubygems_version.rb +1 -1
- data/lib/rubygems/source_index.rb +4 -4
- data/lib/rubygems/specification.rb +5 -0
- data/lib/rubygems/validator.rb +8 -8
- data/setup.rb +806 -588
- data/test/gemutilities.rb +2 -2
- data/test/test_builder.rb +15 -0
- data/test/test_check_command.rb +1 -1
- data/test/test_command.rb +1 -1
- data/test/test_gem_digest.rb +44 -0
- data/test/test_gem_outdated_command.rb +2 -1
- data/test/test_gem_sources_command.rb +11 -6
- data/test/test_installer.rb +1 -1
- data/test/test_open_uri.rb +14 -0
- data/test/test_parse_commands.rb +25 -25
- data/test/test_process_commands.rb +5 -5
- data/test/test_specific_extras.rb +1 -1
- data/test/test_validator.rb +3 -3
- metadata +30 -4
data/ChangeLog
CHANGED
@@ -1,3 +1,63 @@
|
|
1
|
+
2007-05-10 Jim Weirich <jim@weirichhouse.org>
|
2
|
+
|
3
|
+
* lib/rubygems/remote_installer.rb: Uncommented the require
|
4
|
+
'sources' line.
|
5
|
+
|
6
|
+
* lib/rubygems/source_info_cache.rb: Uncommented the require
|
7
|
+
'sources' line.
|
8
|
+
|
9
|
+
* lib/rubygems/rubygems_version.rb (Gem): Bumped to version 0.9.3
|
10
|
+
in preparation for release.
|
11
|
+
|
12
|
+
* lib/rubygems/package.rb (Gem::TarInput::zipped_stream):
|
13
|
+
Zipped_stream now always uses the in memory string IO buffer.
|
14
|
+
There were just too many problems with ZLib (on windows)
|
15
|
+
otherwise.
|
16
|
+
|
17
|
+
2007-03-26 Jim Weirich <jim@weirichhouse.org>
|
18
|
+
|
19
|
+
* (Index): new digest technique.
|
20
|
+
|
21
|
+
* lib/rubygems/validator.rb (Gem::Validator::verify_gem): Removed
|
22
|
+
really old MD5 and replaced with gem based digests.
|
23
|
+
|
24
|
+
* experimental/deployment.rb (Gem::Deployment::Manager::initialize):
|
25
|
+
New digest technique.
|
26
|
+
|
27
|
+
* experimental/test_deployment.rb (TestDeployment::test_deployed_file):
|
28
|
+
New digest technique.
|
29
|
+
|
30
|
+
2007-03-26 Chad Fowler <chad@chadfowler.com>
|
31
|
+
|
32
|
+
* Extracted the big ball of mud that was gem_commands.rb into
|
33
|
+
separate files.
|
34
|
+
|
35
|
+
2007-03-17 Chad Fowler <chad@chadfowler.com>
|
36
|
+
|
37
|
+
* Various ruby 1.8.6 fixes for failing tests.
|
38
|
+
|
39
|
+
* Updated setup.rb to 3.4.1
|
40
|
+
|
41
|
+
* Renamed cmd_manager to command_manager to keep names consistent
|
42
|
+
|
43
|
+
* lib/installer.rb: Rework path checking to use Pathname (ara howard bug #8811)
|
44
|
+
|
45
|
+
2007-03-02 Eric Hodel <drbrain@segment7.net>
|
46
|
+
|
47
|
+
* lib/rubygems.rb: Add bin directory before library directory,
|
48
|
+
otherwise gems like rake don't work.
|
49
|
+
|
50
|
+
2007-03-01 Eric Hodel <drbrain@segment7.net>
|
51
|
+
|
52
|
+
* lib/rubygems/open-uri.rb: Fix all the infinite loop errors.
|
53
|
+
|
54
|
+
* lib/rubygems.rb: Add dirs from activate after -I and ENV['RUBYLIB']
|
55
|
+
dirs. Otherwise gems won't allow -I to work when #gem is called.
|
56
|
+
|
57
|
+
2007-02-11 Chad Fowler <chad@chadfowler.com>
|
58
|
+
|
59
|
+
* test/gemutilities.rb: Fix to make Windows tests pass. (Anatol Pomozov)
|
60
|
+
|
1
61
|
2007-02-05 Jim Weirich <jim@weirichhouse.org>
|
2
62
|
|
3
63
|
* lib/rubygems/rubygems_version.rb (Gem): Bumped to version 0.9.2
|
data/lib/rubygems.rb
CHANGED
@@ -113,7 +113,7 @@ module Gem
|
|
113
113
|
require 'rubygems/installer'
|
114
114
|
require 'rubygems/validator'
|
115
115
|
require 'rubygems/doc_manager'
|
116
|
-
require 'rubygems/
|
116
|
+
require 'rubygems/command_manager'
|
117
117
|
require 'rubygems/gem_runner'
|
118
118
|
require 'rubygems/config_file'
|
119
119
|
end
|
@@ -253,28 +253,31 @@ module Gem
|
|
253
253
|
if spec.loaded?
|
254
254
|
return false unless autorequire
|
255
255
|
result = spec.autorequire ? require(spec.autorequire) : false
|
256
|
-
return result || false
|
256
|
+
return result || false
|
257
257
|
end
|
258
258
|
|
259
259
|
spec.loaded = true
|
260
260
|
@loaded_specs[spec.name] = spec
|
261
|
-
|
261
|
+
|
262
262
|
# Load dependent gems first
|
263
263
|
spec.dependencies.each do |dep_gem|
|
264
264
|
activate(dep_gem, autorequire)
|
265
265
|
end
|
266
|
-
|
267
|
-
#
|
268
|
-
if
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
# Now add the require_paths to the LOAD_PATH
|
273
|
-
spec.require_paths.each do |path|
|
274
|
-
$:.unshift File.join(spec.full_gem_path, path)
|
266
|
+
|
267
|
+
# bin directory must come before library directories
|
268
|
+
spec.require_paths.unshift spec.bindir if spec.bindir
|
269
|
+
|
270
|
+
require_paths = spec.require_paths.map do |path|
|
271
|
+
File.join spec.full_gem_path, path
|
275
272
|
end
|
276
|
-
|
277
|
-
|
273
|
+
|
274
|
+
sitelibdir = Config::CONFIG['sitelibdir']
|
275
|
+
|
276
|
+
# gem directories must come after -I and ENV['RUBYLIB']
|
277
|
+
$:.insert($:.index(sitelibdir), *require_paths)
|
278
|
+
|
279
|
+
# Now autorequire
|
280
|
+
if autorequire && spec.autorequire then # DEPRECATED
|
278
281
|
Array(spec.autorequire).each do |a_lib|
|
279
282
|
require a_lib
|
280
283
|
end
|
@@ -282,7 +285,7 @@ module Gem
|
|
282
285
|
|
283
286
|
return true
|
284
287
|
end
|
285
|
-
|
288
|
+
|
286
289
|
# Report a load error during activation. The message of load
|
287
290
|
# error depends on whether it was a version mismatch or if there
|
288
291
|
# are not gems of any version by the requested name.
|
data/lib/rubygems/builder.rb
CHANGED
@@ -33,7 +33,23 @@ module Gem
|
|
33
33
|
def build
|
34
34
|
@spec.mark_version
|
35
35
|
@spec.validate
|
36
|
-
|
36
|
+
@signer = sign
|
37
|
+
write_package
|
38
|
+
say success
|
39
|
+
@spec.file_name
|
40
|
+
end
|
41
|
+
|
42
|
+
def success
|
43
|
+
<<-EOM
|
44
|
+
Successfully built RubyGem
|
45
|
+
Name: #{@spec.name}
|
46
|
+
Version: #{@spec.version}
|
47
|
+
File: #{@spec.full_name+'.gem'}
|
48
|
+
EOM
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
def sign
|
37
53
|
# if the signing key was specified, then load the file, and swap
|
38
54
|
# to the public key (TODO: we should probably just omit the
|
39
55
|
# signing key in favor of the signing certificate, but that's for
|
@@ -44,30 +60,20 @@ module Gem
|
|
44
60
|
@spec.signing_key = nil
|
45
61
|
@spec.cert_chain = signer.cert_chain.map { |cert| cert.to_s }
|
46
62
|
end
|
47
|
-
|
48
|
-
file_name = @spec.full_name+".gem"
|
49
|
-
|
50
|
-
Package.open(file_name, "w", signer) do |pkg|
|
51
|
-
pkg.metadata = @spec.to_yaml
|
52
|
-
@spec.files.each do |file|
|
53
|
-
next if File.directory? file
|
54
|
-
pkg.add_file_simple(file, File.stat(file_name).mode & 0777,
|
55
|
-
File.size(file)) do |os|
|
56
|
-
os.write File.open(file, "rb"){|f|f.read}
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
say success
|
61
|
-
file_name
|
63
|
+
signer
|
62
64
|
end
|
63
65
|
|
64
|
-
def
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
66
|
+
def write_package
|
67
|
+
Package.open(@spec.file_name, "w", @signer) do |pkg|
|
68
|
+
pkg.metadata = @spec.to_yaml
|
69
|
+
@spec.files.each do |file|
|
70
|
+
next if File.directory? file
|
71
|
+
pkg.add_file_simple(file, File.stat(@spec.file_name).mode & 0777,
|
72
|
+
File.size(file)) do |os|
|
73
|
+
os.write File.open(file, "rb"){|f|f.read}
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
71
77
|
end
|
72
78
|
end
|
73
79
|
end
|
@@ -40,40 +40,40 @@ module Gem
|
|
40
40
|
# sub-commands supported by the gem command.
|
41
41
|
class CommandManager
|
42
42
|
include UserInteraction
|
43
|
-
|
43
|
+
include Commands
|
44
|
+
|
44
45
|
# Return the authoratative instance of the command manager.
|
45
46
|
def self.instance
|
46
|
-
@
|
47
|
+
@command_manager ||= CommandManager.new
|
47
48
|
end
|
48
|
-
|
49
|
+
|
49
50
|
# Register all the subcommands supported by the gem command.
|
50
51
|
def initialize
|
51
52
|
@commands = {}
|
52
|
-
register_command
|
53
|
-
register_command
|
54
|
-
register_command
|
55
|
-
register_command
|
56
|
-
register_command
|
57
|
-
register_command
|
58
|
-
register_command
|
59
|
-
register_command
|
60
|
-
register_command
|
61
|
-
register_command
|
62
|
-
register_command
|
63
|
-
register_command
|
64
|
-
register_command
|
65
|
-
register_command
|
66
|
-
register_command
|
67
|
-
register_command
|
68
|
-
register_command
|
69
|
-
register_command
|
70
|
-
register_command
|
71
|
-
register_command UpdateCommand.new
|
53
|
+
register_command :build
|
54
|
+
register_command :cert
|
55
|
+
register_command :check
|
56
|
+
register_command :contents
|
57
|
+
register_command :dependency
|
58
|
+
register_command :environment
|
59
|
+
register_command :help
|
60
|
+
register_command :install
|
61
|
+
register_command :outdated
|
62
|
+
register_command :pristine
|
63
|
+
register_command :query
|
64
|
+
register_command :list
|
65
|
+
register_command :rdoc
|
66
|
+
register_command :search
|
67
|
+
register_command :sources
|
68
|
+
register_command :specification
|
69
|
+
register_command :uninstall
|
70
|
+
register_command :unpack
|
71
|
+
register_command :update
|
72
72
|
end
|
73
73
|
|
74
74
|
# Register the command object.
|
75
75
|
def register_command(command_obj)
|
76
|
-
@commands[command_obj
|
76
|
+
@commands[command_obj] = load_and_instantiate(command_obj)
|
77
77
|
end
|
78
78
|
|
79
79
|
# Return the registered command from the command name.
|
@@ -136,5 +136,16 @@ module Gem
|
|
136
136
|
len = cmd_name.length
|
137
137
|
self.command_names.select { |n| cmd_name == n[0,len] }
|
138
138
|
end
|
139
|
+
|
140
|
+
private
|
141
|
+
def load_and_instantiate(command_name)
|
142
|
+
command_name = command_name.to_s
|
143
|
+
begin
|
144
|
+
Gem::Commands.const_get("#{command_name.capitalize}Command").new
|
145
|
+
rescue
|
146
|
+
require "rubygems/commands/#{command_name}_command"
|
147
|
+
retry
|
148
|
+
end
|
149
|
+
end
|
139
150
|
end
|
140
151
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Gem
|
2
|
+
module Commands
|
3
|
+
class BuildCommand < Command
|
4
|
+
include CommandAids
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
super('build', 'Build a gem from a gemspec')
|
8
|
+
end
|
9
|
+
|
10
|
+
def usage
|
11
|
+
"#{program_name} GEMSPEC_FILE"
|
12
|
+
end
|
13
|
+
|
14
|
+
def arguments
|
15
|
+
"GEMSPEC_FILE name of gemspec file used to build the gem"
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute
|
19
|
+
gemspec = get_one_gem_name
|
20
|
+
if File.exist?(gemspec)
|
21
|
+
specs = load_gemspecs(gemspec)
|
22
|
+
specs.each do |spec|
|
23
|
+
Gem::Builder.new(spec).build
|
24
|
+
end
|
25
|
+
return
|
26
|
+
else
|
27
|
+
alert_error "Gemspec file not found: #{gemspec}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def load_gemspecs(filename)
|
32
|
+
if yaml?(filename)
|
33
|
+
require 'yaml'
|
34
|
+
result = []
|
35
|
+
open(filename) do |f|
|
36
|
+
begin
|
37
|
+
while spec = Gem::Specification.from_yaml(f)
|
38
|
+
result << spec
|
39
|
+
end
|
40
|
+
rescue EndOfYAMLException => e
|
41
|
+
# OK
|
42
|
+
end
|
43
|
+
end
|
44
|
+
else
|
45
|
+
result = [Gem::Specification.load(filename)]
|
46
|
+
end
|
47
|
+
result
|
48
|
+
end
|
49
|
+
|
50
|
+
def yaml?(filename)
|
51
|
+
line = open(filename) { |f| line = f.gets }
|
52
|
+
result = line =~ %r{^--- *!ruby/object:Gem::Specification}
|
53
|
+
result
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module Gem
|
2
|
+
module Commands
|
3
|
+
|
4
|
+
class CertCommand < Command
|
5
|
+
include CommandAids
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
super(
|
9
|
+
'cert',
|
10
|
+
'Adjust RubyGems certificate settings',
|
11
|
+
{
|
12
|
+
})
|
13
|
+
|
14
|
+
add_option('-a', '--add CERT', 'Add a trusted certificate.') do |value, options|
|
15
|
+
cert = OpenSSL::X509::Certificate.new(File.read(value))
|
16
|
+
Gem::Security.add_trusted_cert(cert)
|
17
|
+
puts "Added #{cert.subject.to_s}"
|
18
|
+
end
|
19
|
+
|
20
|
+
add_option('-l', '--list', 'List trusted certificates.') do |value, options|
|
21
|
+
glob_str = File::join(Gem::Security::OPT[:trust_dir], '*.pem')
|
22
|
+
Dir::glob(glob_str) do |path|
|
23
|
+
cert = OpenSSL::X509::Certificate.new(File.read(path))
|
24
|
+
# this could proably be formatted more gracefully
|
25
|
+
puts cert.subject.to_s
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
add_option('-r', '--remove STRING',
|
30
|
+
'Remove trusted certificates containing',
|
31
|
+
'STRING.') do |value, options|
|
32
|
+
trust_dir = Gem::Security::OPT[:trust_dir]
|
33
|
+
glob_str = File::join(trust_dir, '*.pem')
|
34
|
+
|
35
|
+
Dir::glob(glob_str) do |path|
|
36
|
+
cert = OpenSSL::X509::Certificate.new(File.read(path))
|
37
|
+
if cert.subject.to_s.downcase.index(value)
|
38
|
+
puts "Removing '#{cert.subject.to_s}'"
|
39
|
+
File.unlink(path)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
add_option('-b', '--build EMAIL_ADDR',
|
45
|
+
'Build private key and self-signed',
|
46
|
+
'certificate for EMAIL_ADDR.') do |value, options|
|
47
|
+
vals = Gem::Security::build_self_signed_cert(value)
|
48
|
+
File::chmod(0600, vals[:key_path])
|
49
|
+
puts "Public Cert: #{vals[:cert_path]}",
|
50
|
+
"Private Key: #{vals[:key_path]}",
|
51
|
+
"Don't forget to move the key file to somewhere private..."
|
52
|
+
end
|
53
|
+
|
54
|
+
add_option('-C', '--certificate CERT',
|
55
|
+
'Certificate for --sign command.') do |value, options|
|
56
|
+
cert = OpenSSL::X509::Certificate.new(File.read(value))
|
57
|
+
Gem::Security::OPT[:issuer_cert] = cert
|
58
|
+
end
|
59
|
+
|
60
|
+
add_option('-K', '--private-key KEY',
|
61
|
+
'Private key for --sign command.') do |value, options|
|
62
|
+
key = OpenSSL::PKey::RSA.new(File.read(value))
|
63
|
+
Gem::Security::OPT[:issuer_key] = key
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
add_option('-s', '--sign NEWCERT',
|
68
|
+
'Sign a certificate with my key and',
|
69
|
+
'certificate.') do |value, options|
|
70
|
+
cert = OpenSSL::X509::Certificate.new(File.read(value))
|
71
|
+
my_cert = Gem::Security::OPT[:issuer_cert]
|
72
|
+
my_key = Gem::Security::OPT[:issuer_key]
|
73
|
+
cert = Gem::Security.sign_cert(cert, my_key, my_cert)
|
74
|
+
File::open(value, 'wb') { |file| file.write(cert.to_pem) }
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
def execute
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Gem
|
2
|
+
module Commands
|
3
|
+
class CheckCommand < Command
|
4
|
+
include CommandAids
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
super('check', 'Check installed gems',
|
8
|
+
{:verify => false, :alien => false})
|
9
|
+
|
10
|
+
add_option('-v', '--verify FILE',
|
11
|
+
'Verify gem file against its internal',
|
12
|
+
'checksum') do |value, options|
|
13
|
+
options[:verify] = value
|
14
|
+
end
|
15
|
+
|
16
|
+
add_option('-a', '--alien', "Report 'unmanaged' or rogue files in the",
|
17
|
+
"gem repository") do |value, options|
|
18
|
+
options[:alien] = true
|
19
|
+
end
|
20
|
+
|
21
|
+
add_option('-t', '--test', "Run unit tests for gem") do |value, options|
|
22
|
+
options[:test] = true
|
23
|
+
end
|
24
|
+
|
25
|
+
add_option('-V', '--version',
|
26
|
+
"Specify version for which to run unit tests") do |value, options|
|
27
|
+
options[:version] = value
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def execute
|
32
|
+
if options[:test]
|
33
|
+
version = options[:version] || "> 0.0.0"
|
34
|
+
gem_spec = Gem::SourceIndex.from_installed_gems.search(get_one_gem_name, version).first
|
35
|
+
Gem::Validator.new.unit_test(gem_spec)
|
36
|
+
end
|
37
|
+
if options[:alien]
|
38
|
+
say "Performing the 'alien' operation"
|
39
|
+
Gem::Validator.new.alien.each do |key, val|
|
40
|
+
if(val.size > 0)
|
41
|
+
say "#{key} has #{val.size} problems"
|
42
|
+
val.each do |error_entry|
|
43
|
+
say "\t#{error_entry.path}:"
|
44
|
+
say "\t#{error_entry.problem}"
|
45
|
+
say
|
46
|
+
end
|
47
|
+
else
|
48
|
+
say "#{key} is error-free"
|
49
|
+
end
|
50
|
+
say
|
51
|
+
end
|
52
|
+
end
|
53
|
+
if options[:verify]
|
54
|
+
gem_name = options[:verify]
|
55
|
+
unless gem_name
|
56
|
+
alert_error "Must specify a .gem file with --verify NAME"
|
57
|
+
return
|
58
|
+
end
|
59
|
+
unless File.exist?(gem_name)
|
60
|
+
alert_error "Unknown file: #{gem_name}."
|
61
|
+
return
|
62
|
+
end
|
63
|
+
say "Verifying gem: '#{gem_name}'"
|
64
|
+
begin
|
65
|
+
Gem::Validator.new.verify_gem_file(gem_name)
|
66
|
+
rescue Exception => e
|
67
|
+
alert_error "#{gem_name} is invalid."
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|