rubygems-update 0.9.2 → 0.9.3
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 +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
|