slimgems 1.3.9.4 → 1.3.9.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -106,7 +106,7 @@ require 'thread'
106
106
  module Gem
107
107
  NAME = 'SlimGems'
108
108
  GEM_NAME = 'slimgems'
109
- VERSION = '1.3.9.4'
109
+ VERSION = '1.3.9.5'
110
110
  SlimGemsVersion = RubyGemsVersion = VERSION
111
111
 
112
112
  ##
@@ -633,24 +633,54 @@ module Gem
633
633
  ##
634
634
  # Loads YAML, preferring Psych
635
635
 
636
+ @yaml_loaded = false
637
+
638
+ ##
639
+ # Loads YAML, preferring Psych
640
+
636
641
  def self.load_yaml
637
- begin
638
- require 'psych' unless ENV['TEST_SYCK']
639
- rescue ::LoadError
640
- ensure
641
- require 'yaml'
642
- end
642
+ return if @yaml_loaded
643
+
644
+ test_syck = ENV['TEST_SYCK']
645
+
646
+ unless test_syck
647
+ begin
648
+ gem 'psych', '~> 1.2', '>= 1.2.1'
649
+ rescue Gem::LoadError
650
+ # It's OK if the user does not have the psych gem installed. We will
651
+ # attempt to require the stdlib version
652
+ end
643
653
 
644
- # Hack to handle syck's DefaultKey bug with psych.
645
- # See the note at the top of lib/rubygems/requirement.rb for
646
- # why we end up defining DefaultKey more than once.
647
- if !defined? YAML::Syck
648
- YAML.module_eval do
649
- const_set 'Syck', Module.new {
650
- const_set 'DefaultKey', Class.new
651
- }
654
+ begin
655
+ # Try requiring the gem version *or* stdlib version of psych.
656
+ require 'psych'
657
+ rescue ::LoadError
658
+ # If we can't load psych, thats fine, go on.
659
+ else
660
+ # If 'yaml' has already been required, then we have to
661
+ # be sure to switch it over to the newly loaded psych.
662
+ if defined?(YAML::ENGINE) && YAML::ENGINE.yamler != "psych"
663
+ YAML::ENGINE.yamler = "psych"
652
664
  end
665
+
666
+ require 'rubygems/psych_additions'
667
+ require 'rubygems/psych_tree'
668
+ end
653
669
  end
670
+
671
+ require 'yaml'
672
+
673
+ # If we're supposed to be using syck, then we may have to force
674
+ # activate it via the YAML::ENGINE API.
675
+ if test_syck and defined?(YAML::ENGINE)
676
+ YAML::ENGINE.yamler = "syck" unless YAML::ENGINE.syck?
677
+ end
678
+
679
+ # Now that we're sure some kind of yaml library is loaded, pull
680
+ # in our hack to deal with Syck's DefaultKey ugliness.
681
+ require 'rubygems/syck_hack'
682
+
683
+ @yaml_loaded = true
654
684
  end
655
685
 
656
686
  ##
@@ -0,0 +1,9 @@
1
+ # This exists just to satify bugs in marshal'd gemspecs that
2
+ # contain a reference to YAML::PrivateType. We prune these out
3
+ # in Specification._load, but if we don't have the constant, Marshal
4
+ # blows up.
5
+
6
+ module Psych
7
+ class PrivateType
8
+ end
9
+ end
@@ -0,0 +1,27 @@
1
+ module Gem
2
+ if defined? ::Psych::Visitors
3
+ class NoAliasYAMLTree < Psych::Visitors::YAMLTree
4
+ def visit_String(str)
5
+ return super unless str == '=' # or whatever you want
6
+
7
+ quote = Psych::Nodes::Scalar::SINGLE_QUOTED
8
+ @emitter.scalar str, nil, nil, false, true, quote
9
+ end
10
+
11
+ # Noop this out so there are no anchors
12
+ def register(target, obj)
13
+ end
14
+
15
+ # This is ported over from the yaml_tree in 1.9.3
16
+ def format_time time
17
+ if time.utc?
18
+ time.strftime("%Y-%m-%d %H:%M:%S.%9N Z")
19
+ else
20
+ time.strftime("%Y-%m-%d %H:%M:%S.%9N %:z")
21
+ end
22
+ end
23
+
24
+ private :format_time
25
+ end
26
+ end
27
+ end
@@ -129,18 +129,15 @@ class Gem::Requirement
129
129
  end
130
130
 
131
131
  def marshal_dump # :nodoc:
132
+ fix_syck_default_key_in_requirements
133
+
132
134
  [@requirements]
133
135
  end
134
136
 
135
137
  def marshal_load array # :nodoc:
136
138
  @requirements = array[0]
137
139
 
138
- # Fixup the Syck DefaultKey bug
139
- @requirements.each do |r|
140
- if r[0].kind_of? YAML::Syck::DefaultKey
141
- r[0] = "="
142
- end
143
- end
140
+ fix_syck_default_key_in_requirements
144
141
  end
145
142
 
146
143
  def prerelease?
@@ -157,7 +154,7 @@ class Gem::Requirement
157
154
  # True if +version+ satisfies this Requirement.
158
155
 
159
156
  def satisfied_by? version
160
- requirements.all? { |op, rv| OPS[op].call version, rv }
157
+ requirements.all? { |op, rv| (OPS[op] || OPS["="]).call version, rv }
161
158
  end
162
159
 
163
160
  def to_s # :nodoc:
@@ -167,6 +164,20 @@ class Gem::Requirement
167
164
  def <=> other # :nodoc:
168
165
  to_s <=> other.to_s
169
166
  end
167
+
168
+ private
169
+
170
+ def fix_syck_default_key_in_requirements
171
+ Gem.load_yaml
172
+
173
+ # Fixup the Syck DefaultKey bug
174
+ @requirements.each do |r|
175
+ if r[0].kind_of? Gem::SyckDefaultKey
176
+ r[0] = "="
177
+ end
178
+ end
179
+ end
180
+
170
181
  end
171
182
 
172
183
  # :stopdoc:
@@ -504,7 +504,11 @@ class Gem::Specification
504
504
  gemspec = nil
505
505
  raise "NESTED Specification.load calls not allowed!" if @@gather
506
506
  @@gather = proc { |gs| gemspec = gs }
507
- data = File.read filename
507
+ if defined? Encoding
508
+ data = File.read filename, :mode => 'r:UTF-8:-'
509
+ else
510
+ data = File.read filename
511
+ end
508
512
  eval data, nil, filename
509
513
  gemspec
510
514
  ensure
@@ -0,0 +1,74 @@
1
+ # :stopdoc:
2
+
3
+ # Hack to handle syck's DefaultKey bug
4
+ #
5
+ # This file is always loaded AFTER either syck or psych are already
6
+ # loaded. It then looks at what constants are available and creates
7
+ # a consistent view on all rubys.
8
+ #
9
+ # All this is so that there is always a YAML::Syck::DefaultKey
10
+ # class no matter if the full yaml library has loaded or not.
11
+ #
12
+
13
+ module YAML
14
+ # In newer 1.9.2, there is a Syck toplevel constant instead of it
15
+ # being underneith YAML. If so, reference it back under YAML as
16
+ # well.
17
+ if defined? ::Syck
18
+ # for tests that change YAML::ENGINE
19
+ # 1.8 does not support the second argument to const_defined?
20
+ remove_const :Syck rescue nil
21
+
22
+ Syck = ::Syck
23
+
24
+ # JRuby's "Syck" is called "Yecht"
25
+ elsif defined? YAML::Yecht
26
+ Syck = YAML::Yecht
27
+
28
+ # Otherwise, if there is no YAML::Syck, then we've got just psych
29
+ # loaded, so lets define a stub for DefaultKey.
30
+ elsif !defined? YAML::Syck
31
+ module Syck
32
+ class DefaultKey
33
+ end
34
+ end
35
+ end
36
+
37
+ # Now that we've got something that is always here, define #to_s
38
+ # so when code tries to use this, it at least just shows up like it
39
+ # should.
40
+ module Syck
41
+ class DefaultKey
42
+ remove_method :to_s rescue nil
43
+
44
+ def to_s
45
+ '='
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ # Sometime in the 1.9 dev cycle, the Syck constant was moved from under YAML
52
+ # to be a toplevel constant. So gemspecs created under these versions of Syck
53
+ # will have references to Syck::DefaultKey.
54
+ #
55
+ # So we need to be sure that we reference Syck at the toplevel too so that
56
+ # we can always load these kind of gemspecs.
57
+ #
58
+ if !defined?(Syck)
59
+ Syck = YAML::Syck
60
+ end
61
+
62
+ # Now that we've got Syck setup in all the right places, store
63
+ # a reference to the DefaultKey class inside Gem. We do this so that
64
+ # if later on YAML, etc are redefined, we've still got a consistent
65
+ # place to find the DefaultKey class for comparison.
66
+
67
+ module Gem
68
+ # for tests that change YAML::ENGINE
69
+ remove_const :SyckDefaultKey if const_defined? :SyckDefaultKey
70
+
71
+ SyckDefaultKey = YAML::Syck::DefaultKey
72
+ end
73
+
74
+ # :startdoc:
@@ -177,6 +177,30 @@ end
177
177
  @a2.files.clear
178
178
  end
179
179
 
180
+ def test_self_load_utf8_with_ascii_encoding
181
+ int_enc = Encoding.default_internal
182
+ Encoding.default_internal = 'US-ASCII'
183
+
184
+ spec2 = @a2.dup
185
+ bin = "\u5678"
186
+ full_path = nil
187
+ write_file spec2.spec_name do |io|
188
+ full_path = io.path
189
+ io.write spec2.to_ruby.force_encoding('BINARY').sub("\\u{5678}", bin.force_encoding('BINARY'))
190
+ end
191
+
192
+ begin
193
+ spec = Gem::Specification.load full_path
194
+ assert true
195
+ rescue Encoding::UndefinedConversionError => e
196
+ assert false, "raised encoding conversion error: #{e}"
197
+ end
198
+
199
+ assert_equal spec2, spec
200
+ ensure
201
+ Encoding.default_internal = int_enc
202
+ end if defined?(Encoding)
203
+
180
204
  def test_self_load_legacy_ruby
181
205
  spec = eval LEGACY_RUBY_SPEC
182
206
  assert_equal 'keyedlist', spec.name
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slimgems
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.9.4
4
+ version: 1.3.9.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2012-01-08 00:00:00.000000000 -05:00
15
+ date: 2012-05-08 00:00:00.000000000 -04:00
16
16
  default_executable:
17
17
  dependencies: []
18
18
  description: ! "SlimGems is a drop-in replacement for RubyGems, a package management
@@ -102,6 +102,8 @@ files:
102
102
  - lib/rubygems/package.rb
103
103
  - lib/rubygems/package_task.rb
104
104
  - lib/rubygems/platform.rb
105
+ - lib/rubygems/psych_additions.rb
106
+ - lib/rubygems/psych_tree.rb
105
107
  - lib/rubygems/remote_fetcher.rb
106
108
  - lib/rubygems/require_paths_builder.rb
107
109
  - lib/rubygems/requirement.rb
@@ -112,6 +114,7 @@ files:
112
114
  - lib/rubygems/source_info_cache_entry.rb
113
115
  - lib/rubygems/spec_fetcher.rb
114
116
  - lib/rubygems/specification.rb
117
+ - lib/rubygems/syck_hack.rb
115
118
  - lib/rubygems/test_utilities.rb
116
119
  - lib/rubygems/text.rb
117
120
  - lib/rubygems/uninstaller.rb
@@ -216,7 +219,7 @@ files:
216
219
  has_rdoc: true
217
220
  homepage: http://slimgems.github.com
218
221
  licenses: []
219
- post_install_message: ! "Upgraded from RubyGems to SlimGems 1.3.9.4\n\uFEFF=== 1.3.9.3
222
+ post_install_message: ! "Upgraded from RubyGems to SlimGems 1.3.9.5\n\uFEFF=== 1.3.9.3
220
223
  / 2011-09-07\n\nSlimGems is a drop-in replacement for RubyGems. See README.md for
221
224
  more.\n\n* Add support for Ruby 1.9.3 preview release (#9)\n* Fix rubygems-pwn gem
222
225
  install remote execution vulnerability (#10)\n\n"
@@ -237,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
240
  version: '0'
238
241
  requirements: []
239
242
  rubyforge_project:
240
- rubygems_version: 1.3.9.3
243
+ rubygems_version: 1.3.9.4
241
244
  signing_key:
242
245
  specification_version: 3
243
246
  summary: SlimGems is a package management framework for Ruby