rubygems-update 1.3.5 → 1.3.6
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.tar.gz.sig +0 -0
- data/.autotest +8 -1
- data/ChangeLog +164 -0
- data/History.txt +52 -1
- data/Manifest.txt +8 -8
- data/README +3 -2
- data/Rakefile +49 -5
- data/bin/gem +2 -2
- data/bin/update_rubygems +9 -11
- data/cruise_config.rb +4 -3
- data/hide_lib_for_update/note.txt +5 -0
- data/lib/rbconfig/datadir.rb +10 -14
- data/lib/rubygems.rb +117 -140
- data/lib/rubygems/builder.rb +4 -2
- data/lib/rubygems/command.rb +51 -48
- data/lib/rubygems/command_manager.rb +2 -0
- data/lib/rubygems/commands/dependency_command.rb +10 -5
- data/lib/rubygems/commands/environment_command.rb +1 -1
- data/lib/rubygems/commands/fetch_command.rb +6 -5
- data/lib/rubygems/commands/install_command.rb +1 -0
- data/lib/rubygems/commands/mirror_command.rb +8 -8
- data/lib/rubygems/commands/owner_command.rb +75 -0
- data/lib/rubygems/commands/pristine_command.rb +1 -1
- data/lib/rubygems/commands/push_command.rb +45 -0
- data/lib/rubygems/commands/query_command.rb +4 -1
- data/lib/rubygems/commands/rdoc_command.rb +24 -9
- data/lib/rubygems/commands/server_command.rb +6 -0
- data/lib/rubygems/commands/setup_command.rb +14 -4
- data/lib/rubygems/commands/unpack_command.rb +2 -2
- data/lib/rubygems/commands/update_command.rb +2 -2
- data/lib/rubygems/commands/which_command.rb +7 -9
- data/lib/rubygems/config_file.rb +100 -26
- data/lib/rubygems/defaults.rb +1 -1
- data/lib/rubygems/dependency.rb +133 -75
- data/lib/rubygems/dependency_installer.rb +28 -10
- data/lib/rubygems/dependency_list.rb +41 -12
- data/lib/rubygems/doc_manager.rb +7 -0
- data/lib/rubygems/format.rb +16 -20
- data/lib/rubygems/gem_openssl.rb +1 -1
- data/lib/rubygems/gem_path_searcher.rb +10 -12
- data/lib/rubygems/gemcutter_utilities.rb +49 -0
- data/lib/rubygems/indexer.rb +2 -2
- data/lib/rubygems/install_update_options.rb +1 -9
- data/lib/rubygems/installer.rb +35 -76
- data/lib/rubygems/local_remote_options.rb +1 -2
- data/lib/rubygems/package.rb +0 -1
- data/lib/rubygems/package/tar_input.rb +3 -1
- data/lib/rubygems/package_task.rb +16 -11
- data/lib/rubygems/remote_fetcher.rb +22 -8
- data/lib/rubygems/requirement.rb +78 -100
- data/lib/rubygems/server.rb +41 -10
- data/lib/rubygems/source_index.rb +5 -5
- data/lib/rubygems/spec_fetcher.rb +2 -2
- data/lib/rubygems/specification.rb +66 -16
- data/lib/rubygems/test_utilities.rb +33 -4
- data/lib/rubygems/uninstaller.rb +3 -3
- data/lib/rubygems/user_interaction.rb +45 -0
- data/lib/rubygems/validator.rb +6 -7
- data/lib/rubygems/version.rb +206 -149
- data/lib/rubygems/version_option.rb +16 -0
- data/test/fake_certlib/openssl.rb +1 -1
- data/test/functional.rb +0 -7
- data/test/gem_installer_test_case.rb +4 -4
- data/test/gem_package_tar_test_case.rb +1 -1
- data/test/gemutilities.rb +35 -31
- data/test/insure_session.rb +0 -8
- data/test/mockgemui.rb +0 -8
- data/test/simple_gem.rb +2 -8
- data/test/test_config.rb +3 -10
- data/test/test_gem.rb +9 -14
- data/test/test_gem_builder.rb +1 -7
- data/test/test_gem_command.rb +1 -8
- data/test/test_gem_command_manager.rb +1 -7
- data/test/test_gem_commands_build_command.rb +4 -4
- data/test/test_gem_commands_cert_command.rb +1 -2
- data/test/test_gem_commands_check_command.rb +1 -7
- data/test/test_gem_commands_contents_command.rb +1 -1
- data/test/test_gem_commands_dependency_command.rb +17 -31
- data/test/test_gem_commands_environment_command.rb +1 -1
- data/test/test_gem_commands_fetch_command.rb +14 -12
- data/test/test_gem_commands_generate_index_command.rb +1 -1
- data/test/test_gem_commands_install_command.rb +22 -20
- data/test/test_gem_commands_list_command.rb +1 -1
- data/test/test_gem_commands_lock_command.rb +1 -1
- data/test/test_gem_commands_mirror_command.rb +5 -5
- data/test/test_gem_commands_outdated_command.rb +3 -5
- data/test/test_gem_commands_owner_command.rb +105 -0
- data/test/test_gem_commands_pristine_command.rb +2 -2
- data/test/test_gem_commands_push_command.rb +61 -0
- data/test/test_gem_commands_query_command.rb +23 -56
- data/test/test_gem_commands_server_command.rb +1 -1
- data/test/test_gem_commands_sources_command.rb +1 -70
- data/test/test_gem_commands_specification_command.rb +3 -4
- data/test/test_gem_commands_stale_command.rb +1 -1
- data/test/test_gem_commands_uninstall_command.rb +3 -4
- data/test/test_gem_commands_unpack_command.rb +1 -1
- data/test/test_gem_commands_update_command.rb +13 -13
- data/test/test_gem_commands_which_command.rb +66 -0
- data/test/test_gem_config_file.rb +13 -7
- data/test/test_gem_dependency.rb +82 -134
- data/test/test_gem_dependency_installer.rb +55 -30
- data/test/test_gem_dependency_list.rb +28 -7
- data/test/test_gem_doc_manager.rb +1 -7
- data/test/test_gem_ext_configure_builder.rb +2 -2
- data/test/test_gem_ext_ext_conf_builder.rb +1 -1
- data/test/test_gem_ext_rake_builder.rb +1 -1
- data/test/test_gem_format.rb +14 -11
- data/test/test_gem_gem_path_searcher.rb +12 -1
- data/test/test_gem_gem_runner.rb +1 -1
- data/test/test_gem_gemcutter_utilities.rb +103 -0
- data/test/test_gem_indexer.rb +44 -51
- data/test/test_gem_install_update_options.rb +1 -7
- data/test/test_gem_installer.rb +22 -82
- data/test/test_gem_local_remote_options.rb +1 -1
- data/test/test_gem_package_tar_header.rb +1 -8
- data/test/test_gem_package_tar_input.rb +1 -8
- data/test/test_gem_package_tar_output.rb +1 -8
- data/test/test_gem_package_tar_reader.rb +1 -8
- data/test/test_gem_package_tar_reader_entry.rb +1 -8
- data/test/test_gem_package_tar_writer.rb +1 -8
- data/test/test_gem_package_task.rb +1 -25
- data/test/test_gem_platform.rb +4 -4
- data/test/test_gem_remote_fetcher.rb +31 -21
- data/test/test_gem_requirement.rb +210 -140
- data/test/test_gem_server.rb +36 -1
- data/test/test_gem_source_index.rb +7 -13
- data/test/test_gem_spec_fetcher.rb +17 -47
- data/test/test_gem_specification.rb +7 -20
- data/test/test_gem_stream_ui.rb +21 -1
- data/test/test_gem_uninstaller.rb +1 -2
- data/test/test_gem_validator.rb +2 -8
- data/test/test_gem_version.rb +110 -254
- data/test/test_gem_version_option.rb +1 -1
- data/test/test_kernel.rb +1 -7
- data/util/CL2notes +1 -1
- data/util/gem_prelude.rb.template +64 -41
- metadata +33 -71
- metadata.gz.sig +0 -0
- data/lib/rubygems/digest/digest_adapter.rb +0 -49
- data/lib/rubygems/digest/md5.rb +0 -23
- data/lib/rubygems/digest/sha1.rb +0 -22
- data/lib/rubygems/digest/sha2.rb +0 -22
- data/lib/rubygems/timer.rb +0 -28
- data/test/test_gem_digest.rb +0 -46
- data/test/test_gem_source_info_cache.rb +0 -447
- data/test/test_gem_source_info_cache_entry.rb +0 -78
@@ -253,18 +253,18 @@ class Gem::SourceIndex
|
|
253
253
|
# change in the index.
|
254
254
|
|
255
255
|
def index_signature
|
256
|
-
require '
|
256
|
+
require 'digest'
|
257
257
|
|
258
|
-
|
258
|
+
Digest::SHA256.new.hexdigest(@gems.keys.sort.join(',')).to_s
|
259
259
|
end
|
260
260
|
|
261
261
|
##
|
262
262
|
# The signature for the given gem specification.
|
263
263
|
|
264
264
|
def gem_signature(gem_full_name)
|
265
|
-
require '
|
265
|
+
require 'digest'
|
266
266
|
|
267
|
-
|
267
|
+
Digest::SHA256.new.hexdigest(@gems[gem_full_name].to_yaml).to_s
|
268
268
|
end
|
269
269
|
|
270
270
|
def size
|
@@ -303,7 +303,7 @@ class Gem::SourceIndex
|
|
303
303
|
version_requirement = platform_only || Gem::Requirement.default
|
304
304
|
when Gem::Dependency then
|
305
305
|
only_platform = platform_only
|
306
|
-
version_requirement = gem_pattern.
|
306
|
+
version_requirement = gem_pattern.requirement
|
307
307
|
gem_pattern = if Regexp === gem_pattern.name then
|
308
308
|
gem_pattern.name
|
309
309
|
elsif gem_pattern.name.empty? then
|
@@ -197,7 +197,7 @@ class Gem::SpecFetcher
|
|
197
197
|
|
198
198
|
if type == :all
|
199
199
|
list.values.map do |gems|
|
200
|
-
gems.reject! { |g| g[1].prerelease? }
|
200
|
+
gems.reject! { |g| !g[1] || g[1].prerelease? }
|
201
201
|
end
|
202
202
|
end
|
203
203
|
|
@@ -242,7 +242,7 @@ class Gem::SpecFetcher
|
|
242
242
|
FileUtils.mkdir_p cache_dir
|
243
243
|
|
244
244
|
open local_file, 'wb' do |io|
|
245
|
-
|
245
|
+
io << spec_dump
|
246
246
|
end
|
247
247
|
rescue
|
248
248
|
end
|
@@ -17,7 +17,7 @@ class Date; end # for ruby_code if date.rb wasn't required
|
|
17
17
|
# defined in a .gemspec file or a Rakefile, and looks like this:
|
18
18
|
#
|
19
19
|
# spec = Gem::Specification.new do |s|
|
20
|
-
# s.name = '
|
20
|
+
# s.name = 'example'
|
21
21
|
# s.version = '1.0'
|
22
22
|
# s.summary = 'Example gem specification'
|
23
23
|
# ...
|
@@ -409,15 +409,19 @@ class Gem::Specification
|
|
409
409
|
# :startdoc:
|
410
410
|
|
411
411
|
##
|
412
|
-
# Specification constructor. Assigns the default values to the
|
413
|
-
# and yields itself for further
|
412
|
+
# Specification constructor. Assigns the default values to the
|
413
|
+
# attributes and yields itself for further
|
414
|
+
# initialization. Optionally takes +name+ and +version+.
|
414
415
|
|
415
|
-
def initialize
|
416
|
+
def initialize name = nil, version = nil
|
416
417
|
@new_platform = nil
|
417
418
|
assign_defaults
|
418
419
|
@loaded = false
|
419
420
|
@loaded_from = nil
|
420
421
|
|
422
|
+
self.name = name if name
|
423
|
+
self.version = version if version
|
424
|
+
|
421
425
|
yield self if block_given?
|
422
426
|
|
423
427
|
@@gather.call(self) if @@gather
|
@@ -498,7 +502,7 @@ class Gem::Specification
|
|
498
502
|
|
499
503
|
def self.load(filename)
|
500
504
|
gemspec = nil
|
501
|
-
|
505
|
+
raise "NESTED Specification.load calls not allowed!" if @@gather
|
502
506
|
@@gather = proc { |gs| gemspec = gs }
|
503
507
|
data = File.read(filename)
|
504
508
|
eval(data)
|
@@ -598,10 +602,12 @@ class Gem::Specification
|
|
598
602
|
end
|
599
603
|
|
600
604
|
##
|
601
|
-
# The default (generated) file name of the gem.
|
605
|
+
# The default (generated) file name of the gem. See also #spec_name.
|
606
|
+
#
|
607
|
+
# spec.file_name # => "example-1.0.gem"
|
602
608
|
|
603
609
|
def file_name
|
604
|
-
full_name +
|
610
|
+
full_name + '.gem'
|
605
611
|
end
|
606
612
|
|
607
613
|
##
|
@@ -620,7 +626,7 @@ class Gem::Specification
|
|
620
626
|
|
621
627
|
def satisfies_requirement?(dependency)
|
622
628
|
return @name == dependency.name &&
|
623
|
-
dependency.
|
629
|
+
dependency.requirement.satisfied_by?(@version)
|
624
630
|
end
|
625
631
|
|
626
632
|
##
|
@@ -630,6 +636,15 @@ class Gem::Specification
|
|
630
636
|
[@name, @version, @new_platform == Gem::Platform::RUBY ? -1 : 1]
|
631
637
|
end
|
632
638
|
|
639
|
+
##
|
640
|
+
# The default name of the gemspec. See also #file_name
|
641
|
+
#
|
642
|
+
# spec.spec_name # => "example-1.0.gemspec"
|
643
|
+
|
644
|
+
def spec_name
|
645
|
+
full_name + '.gemspec'
|
646
|
+
end
|
647
|
+
|
633
648
|
def <=>(other) # :nodoc:
|
634
649
|
sort_obj <=> other.sort_obj
|
635
650
|
end
|
@@ -1033,14 +1048,18 @@ class Gem::Specification
|
|
1033
1048
|
##
|
1034
1049
|
# :attr_accessor: rubygems_version
|
1035
1050
|
#
|
1036
|
-
# The version of RubyGems used to create this gem
|
1051
|
+
# The version of RubyGems used to create this gem.
|
1052
|
+
#
|
1053
|
+
# Do not set this, it is set automatically when the gem is packaged.
|
1037
1054
|
|
1038
1055
|
required_attribute :rubygems_version, Gem::RubyGemsVersion
|
1039
1056
|
|
1040
1057
|
##
|
1041
1058
|
# :attr_accessor: specification_version
|
1042
1059
|
#
|
1043
|
-
# The Gem::Specification version of this gemspec
|
1060
|
+
# The Gem::Specification version of this gemspec.
|
1061
|
+
#
|
1062
|
+
# Do not set this, it is set automatically when the gem is packaged.
|
1044
1063
|
|
1045
1064
|
required_attribute :specification_version, CURRENT_SPECIFICATION_VERSION
|
1046
1065
|
|
@@ -1062,6 +1081,8 @@ class Gem::Specification
|
|
1062
1081
|
# :attr_accessor: date
|
1063
1082
|
#
|
1064
1083
|
# The date this gem was created
|
1084
|
+
#
|
1085
|
+
# Do not set this, it is set automatically when the gem is packaged.
|
1065
1086
|
|
1066
1087
|
required_attribute :date, TODAY
|
1067
1088
|
|
@@ -1069,13 +1090,20 @@ class Gem::Specification
|
|
1069
1090
|
# :attr_accessor: summary
|
1070
1091
|
#
|
1071
1092
|
# A short summary of this gem's description. Displayed in `gem list -d`.
|
1093
|
+
#
|
1094
|
+
# The description should be more detailed than the summary. For example,
|
1095
|
+
# you might wish to copy the entire README into the description.
|
1096
|
+
#
|
1097
|
+
# As of RubyGems 1.3.2 newlines are no longer stripped.
|
1072
1098
|
|
1073
1099
|
required_attribute :summary
|
1074
1100
|
|
1075
1101
|
##
|
1076
1102
|
# :attr_accessor: require_paths
|
1077
1103
|
#
|
1078
|
-
# Paths in the gem to add to $LOAD_PATH when this gem is activated
|
1104
|
+
# Paths in the gem to add to $LOAD_PATH when this gem is activated.
|
1105
|
+
#
|
1106
|
+
# The default 'lib' is typically sufficient.
|
1079
1107
|
|
1080
1108
|
required_attribute :require_paths, ['lib']
|
1081
1109
|
|
@@ -1085,6 +1113,13 @@ class Gem::Specification
|
|
1085
1113
|
# :attr_accessor: email
|
1086
1114
|
#
|
1087
1115
|
# A contact email for this gem
|
1116
|
+
#
|
1117
|
+
# If you are providing multiple authors and multiple emails they should be
|
1118
|
+
# in the same order such that:
|
1119
|
+
#
|
1120
|
+
# Hash[*spec.authors.zip(spec.emails).flatten]
|
1121
|
+
#
|
1122
|
+
# Gives a hash of author name to email address.
|
1088
1123
|
|
1089
1124
|
attribute :email
|
1090
1125
|
|
@@ -1122,6 +1157,8 @@ class Gem::Specification
|
|
1122
1157
|
# :attr_accessor: default_executable
|
1123
1158
|
#
|
1124
1159
|
# The default executable for this gem.
|
1160
|
+
#
|
1161
|
+
# This is not used.
|
1125
1162
|
|
1126
1163
|
attribute :default_executable
|
1127
1164
|
|
@@ -1149,7 +1186,7 @@ class Gem::Specification
|
|
1149
1186
|
##
|
1150
1187
|
# :attr_accessor: required_ruby_version
|
1151
1188
|
#
|
1152
|
-
# The
|
1189
|
+
# The version of ruby required by this gem
|
1153
1190
|
|
1154
1191
|
attribute :required_ruby_version, Gem::Requirement.default
|
1155
1192
|
|
@@ -1164,6 +1201,9 @@ class Gem::Specification
|
|
1164
1201
|
# :attr_accessor: platform
|
1165
1202
|
#
|
1166
1203
|
# The platform this gem runs on. See Gem::Platform for details.
|
1204
|
+
#
|
1205
|
+
# Setting this to any value other than Gem::Platform::RUBY or
|
1206
|
+
# Gem::Platform::CURRENT is probably wrong.
|
1167
1207
|
|
1168
1208
|
attribute :platform, Gem::Platform::RUBY
|
1169
1209
|
|
@@ -1192,7 +1232,14 @@ class Gem::Specification
|
|
1192
1232
|
##
|
1193
1233
|
# :attr_accessor: authors
|
1194
1234
|
#
|
1195
|
-
# The list of
|
1235
|
+
# The list of author names who wrote this gem.
|
1236
|
+
#
|
1237
|
+
# If you are providing multiple authors and multiple emails they should be
|
1238
|
+
# in the same order such that:
|
1239
|
+
#
|
1240
|
+
# Hash[*spec.authors.zip(spec.emails).flatten]
|
1241
|
+
#
|
1242
|
+
# Gives a hash of author name to email address.
|
1196
1243
|
|
1197
1244
|
array_attribute :authors
|
1198
1245
|
|
@@ -1228,21 +1275,21 @@ class Gem::Specification
|
|
1228
1275
|
##
|
1229
1276
|
# :attr_accessor: rdoc_options
|
1230
1277
|
#
|
1231
|
-
# An ARGV
|
1278
|
+
# An ARGV style array of options to RDoc
|
1232
1279
|
|
1233
1280
|
array_attribute :rdoc_options
|
1234
1281
|
|
1235
1282
|
##
|
1236
1283
|
# :attr_accessor: extra_rdoc_files
|
1237
1284
|
#
|
1238
|
-
# Extra files to add to RDoc
|
1285
|
+
# Extra files to add to RDoc such as README or doc/examples.txt
|
1239
1286
|
|
1240
1287
|
array_attribute :extra_rdoc_files
|
1241
1288
|
|
1242
1289
|
##
|
1243
1290
|
# :attr_accessor: executables
|
1244
1291
|
#
|
1245
|
-
# Executables included in the gem
|
1292
|
+
# Executables included in the gem.
|
1246
1293
|
|
1247
1294
|
array_attribute :executables
|
1248
1295
|
|
@@ -1266,6 +1313,9 @@ class Gem::Specification
|
|
1266
1313
|
# :attr_reader: dependencies
|
1267
1314
|
#
|
1268
1315
|
# A list of Gem::Dependency objects this gem depends on.
|
1316
|
+
#
|
1317
|
+
# Use #add_dependency or #add_development_dependency to add dependencies to
|
1318
|
+
# a gem.
|
1269
1319
|
|
1270
1320
|
array_attribute :dependencies
|
1271
1321
|
|
@@ -23,6 +23,7 @@ require 'rubygems/remote_fetcher'
|
|
23
23
|
class Gem::FakeFetcher
|
24
24
|
|
25
25
|
attr_reader :data
|
26
|
+
attr_reader :last_request
|
26
27
|
attr_accessor :paths
|
27
28
|
|
28
29
|
def initialize
|
@@ -30,16 +31,20 @@ class Gem::FakeFetcher
|
|
30
31
|
@paths = []
|
31
32
|
end
|
32
33
|
|
33
|
-
def
|
34
|
+
def find_data(path)
|
34
35
|
path = path.to_s
|
35
36
|
@paths << path
|
36
|
-
raise ArgumentError, 'need full URI' unless path =~ %r'^
|
37
|
+
raise ArgumentError, 'need full URI' unless path =~ %r'^https?://'
|
37
38
|
|
38
39
|
unless @data.key? path then
|
39
40
|
raise Gem::RemoteFetcher::FetchError.new("no data for #{path}", path)
|
40
41
|
end
|
41
42
|
|
42
|
-
|
43
|
+
@data[path]
|
44
|
+
end
|
45
|
+
|
46
|
+
def fetch_path path, mtime = nil
|
47
|
+
data = find_data(path)
|
43
48
|
|
44
49
|
if data.respond_to?(:call) then
|
45
50
|
data.call
|
@@ -52,6 +57,30 @@ class Gem::FakeFetcher
|
|
52
57
|
end
|
53
58
|
end
|
54
59
|
|
60
|
+
# Thanks, FakeWeb!
|
61
|
+
def open_uri_or_path(path)
|
62
|
+
data = find_data(path)
|
63
|
+
body, code, msg = data
|
64
|
+
|
65
|
+
response = Net::HTTPResponse.send(:response_class, code.to_s).new("1.0", code.to_s, msg)
|
66
|
+
response.instance_variable_set(:@body, body)
|
67
|
+
response.instance_variable_set(:@read, true)
|
68
|
+
response
|
69
|
+
end
|
70
|
+
|
71
|
+
def request(uri, request_class, last_modified = nil)
|
72
|
+
data = find_data(uri)
|
73
|
+
body, code, msg = data
|
74
|
+
|
75
|
+
@last_request = request_class.new uri.request_uri
|
76
|
+
yield @last_request if block_given?
|
77
|
+
|
78
|
+
response = Net::HTTPResponse.send(:response_class, code.to_s).new("1.0", code.to_s, msg)
|
79
|
+
response.instance_variable_set(:@body, body)
|
80
|
+
response.instance_variable_set(:@read, true)
|
81
|
+
response
|
82
|
+
end
|
83
|
+
|
55
84
|
def fetch_size(path)
|
56
85
|
path = path.to_s
|
57
86
|
@paths << path
|
@@ -68,7 +97,7 @@ class Gem::FakeFetcher
|
|
68
97
|
end
|
69
98
|
|
70
99
|
def download spec, source_uri, install_dir = Gem.dir
|
71
|
-
name =
|
100
|
+
name = spec.file_name
|
72
101
|
path = File.join(install_dir, 'cache', name)
|
73
102
|
|
74
103
|
Gem.ensure_gem_subdirectories install_dir
|
data/lib/rubygems/uninstaller.rb
CHANGED
@@ -202,7 +202,7 @@ class Gem::Uninstaller
|
|
202
202
|
spec.name, spec.version, spec.original_platform].join '-'
|
203
203
|
|
204
204
|
spec_dir = File.join spec.installation_path, 'specifications'
|
205
|
-
gemspec = File.join spec_dir,
|
205
|
+
gemspec = File.join spec_dir, spec.spec_name
|
206
206
|
|
207
207
|
unless File.exist? gemspec then
|
208
208
|
gemspec = File.join spec_dir, "#{original_platform_name}.gemspec"
|
@@ -211,7 +211,7 @@ class Gem::Uninstaller
|
|
211
211
|
FileUtils.rm_rf gemspec
|
212
212
|
|
213
213
|
cache_dir = File.join spec.installation_path, 'cache'
|
214
|
-
gem = File.join cache_dir,
|
214
|
+
gem = File.join cache_dir, spec.file_name
|
215
215
|
|
216
216
|
unless File.exist? gem then
|
217
217
|
gem = File.join cache_dir, "#{original_platform_name}.gem"
|
@@ -251,7 +251,7 @@ class Gem::Uninstaller
|
|
251
251
|
spec.dependent_gems.each do |gem,dep,satlist|
|
252
252
|
msg <<
|
253
253
|
("#{gem.name}-#{gem.version} depends on " +
|
254
|
-
"[#{dep.name} (#{dep.
|
254
|
+
"[#{dep.name} (#{dep.requirement})]")
|
255
255
|
end
|
256
256
|
msg << 'If you remove this gems, one or more dependencies will not be met.'
|
257
257
|
msg << 'Continue with Uninstall?'
|
@@ -112,6 +112,7 @@ module Gem::UserInteraction
|
|
112
112
|
:alert_error,
|
113
113
|
:alert_warning,
|
114
114
|
:ask,
|
115
|
+
:ask_for_password,
|
115
116
|
:ask_yes_no,
|
116
117
|
:choose_from_list,
|
117
118
|
:say,
|
@@ -217,6 +218,50 @@ class Gem::StreamUI
|
|
217
218
|
result
|
218
219
|
end
|
219
220
|
|
221
|
+
##
|
222
|
+
# Ask for a password. Does not echo response to terminal.
|
223
|
+
|
224
|
+
def ask_for_password(question)
|
225
|
+
return nil if not @ins.tty?
|
226
|
+
|
227
|
+
@outs.print(question + " ")
|
228
|
+
@outs.flush
|
229
|
+
|
230
|
+
Gem.win_platform? ? ask_for_password_on_windows : ask_for_password_on_unix
|
231
|
+
end
|
232
|
+
|
233
|
+
##
|
234
|
+
# Asks for a password that works on windows. Ripped from the Heroku gem.
|
235
|
+
|
236
|
+
def ask_for_password_on_windows
|
237
|
+
require "Win32API"
|
238
|
+
char = nil
|
239
|
+
password = ''
|
240
|
+
|
241
|
+
while char = Win32API.new("crtdll", "_getch", [ ], "L").Call do
|
242
|
+
break if char == 10 || char == 13 # received carriage return or newline
|
243
|
+
if char == 127 || char == 8 # backspace and delete
|
244
|
+
password.slice!(-1, 1)
|
245
|
+
else
|
246
|
+
password << char.chr
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
puts
|
251
|
+
password
|
252
|
+
end
|
253
|
+
|
254
|
+
##
|
255
|
+
# Asks for a password that works on unix
|
256
|
+
|
257
|
+
def ask_for_password_on_unix
|
258
|
+
system "stty -echo"
|
259
|
+
password = @ins.gets
|
260
|
+
password.chomp! if password
|
261
|
+
system "stty echo"
|
262
|
+
password
|
263
|
+
end
|
264
|
+
|
220
265
|
##
|
221
266
|
# Display a statement.
|
222
267
|
|
data/lib/rubygems/validator.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
require 'find'
|
8
8
|
|
9
|
-
require '
|
9
|
+
require 'digest'
|
10
10
|
require 'rubygems/format'
|
11
11
|
require 'rubygems/installer'
|
12
12
|
|
@@ -40,7 +40,7 @@ class Gem::Validator
|
|
40
40
|
sum_data = gem_data.gsub(/MD5SUM = "([a-z0-9]+)"/,
|
41
41
|
"MD5SUM = \"#{"F" * 32}\"")
|
42
42
|
|
43
|
-
unless
|
43
|
+
unless Digest::MD5.hexdigest(sum_data) == $1.to_s then
|
44
44
|
raise Gem::VerificationError, 'invalid checksum for gem file'
|
45
45
|
end
|
46
46
|
end
|
@@ -93,9 +93,8 @@ class Gem::Validator
|
|
93
93
|
next unless gems.include? gem_spec.name unless gems.empty?
|
94
94
|
|
95
95
|
install_dir = gem_spec.installation_path
|
96
|
-
gem_path = File.join
|
97
|
-
spec_path = File.join
|
98
|
-
gem_spec.full_name) + ".gemspec"
|
96
|
+
gem_path = File.join install_dir, "cache", gem_spec.file_name
|
97
|
+
spec_path = File.join install_dir, "specifications", gem_spec.spec_name
|
99
98
|
gem_directory = gem_spec.full_gem_path
|
100
99
|
|
101
100
|
unless File.directory? gem_directory then
|
@@ -139,8 +138,8 @@ class Gem::Validator
|
|
139
138
|
next unless data # HACK `gem check -a mkrf`
|
140
139
|
|
141
140
|
open File.join(gem_directory, entry['path']), Gem.binary_mode do |f|
|
142
|
-
unless
|
143
|
-
|
141
|
+
unless Digest::MD5.hexdigest(f.read).to_s ==
|
142
|
+
Digest::MD5.hexdigest(data).to_s then
|
144
143
|
errors[gem_name][entry['path']] = "Modified from original"
|
145
144
|
end
|
146
145
|
end
|