libgems 0.0.5 → 0.1.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.
@@ -1,4 +1,17 @@
1
- === 1.3.8 / 2011-05-16
1
+ === 1.3.9.1 / 2011-06-03
2
+
3
+ SlimGems is a drop-in replacement for RubyGems. See README.md for more.
4
+
5
+ * Fixes slimgems getting uninstalled when `gem uninstall GEM` is called.
6
+
7
+ === 1.3.9 / 2011-06-02
8
+
9
+ SlimGems is reborn! SlimGems is a fork of RubyGems, see README.md for more.
10
+
11
+ This release fixes some minor issues in installing SlimGems in certain
12
+ environments.
13
+
14
+ === 1.3.8 / 2011-06-01
2
15
 
3
16
  SlimGems is born! SlimGems is a fork of RubyGems, see README.md for more.
4
17
 
@@ -98,8 +98,8 @@ require 'thread'
98
98
  module LibGems
99
99
  NAME = 'LibGems'
100
100
  GEM_NAME = 'libgems'
101
- VERSION = '1.3.8'
102
- LIBGEMS_VERSION = '0.0.5'
101
+ VERSION = '1.3.9.2'
102
+ LIBGEMS_VERSION = '0.1.0'
103
103
 
104
104
  ##
105
105
  # Raised when SlimGems is unable to load or activate a gem. Contains the
@@ -662,10 +662,23 @@ module LibGems
662
662
  # Loads YAML, preferring Psych
663
663
 
664
664
  def self.load_yaml
665
- require 'psych'
666
- rescue ::LoadError
667
- ensure
668
- require 'yaml'
665
+ begin
666
+ require 'psych' unless ENV['TEST_SYCK']
667
+ rescue ::LoadError
668
+ ensure
669
+ require 'yaml'
670
+ end
671
+
672
+ # Hack to handle syck's DefaultKey bug with psych.
673
+ # See the note at the top of lib/rubygems/requirement.rb for
674
+ # why we end up defining DefaultKey more than once.
675
+ if !defined? YAML::Syck
676
+ YAML.module_eval do
677
+ const_set 'Syck', Module.new {
678
+ const_set 'DefaultKey', Class.new
679
+ }
680
+ end
681
+ end
669
682
  end
670
683
 
671
684
  ##
@@ -36,18 +36,32 @@ class LibGems::Commands::FetchCommand < LibGems::Command
36
36
  version = options[:version] || LibGems::Requirement.default
37
37
  all = LibGems::Requirement.default != version
38
38
 
39
+ platform = LibGems.platforms.last
39
40
  gem_names = get_all_gem_names
40
41
 
41
42
  gem_names.each do |gem_name|
42
43
  dep = LibGems::Dependency.new gem_name, version
43
44
  dep.prerelease = options[:prerelease]
44
45
 
45
- specs_and_sources = LibGems::SpecFetcher.fetcher.fetch(dep, all, true,
46
- dep.prerelease?)
46
+ # Because of the madness that is SpecFetcher, you can't
47
+ # set both all and prerelease to true. If you do, prerelease
48
+ # is ignored.
49
+
50
+ if dep.prerelease? and all
51
+ specs_and_sources, errors =
52
+ LibGems::SpecFetcher.fetcher.fetch_with_errors(dep, false, true,
53
+ dep.prerelease?)
54
+ else
55
+ specs_and_sources, errors =
56
+ LibGems::SpecFetcher.fetcher.fetch_with_errors(dep, all, true,
57
+ dep.prerelease?)
58
+ end
59
+
47
60
 
48
- specs_and_sources, errors =
49
- LibGems::SpecFetcher.fetcher.fetch_with_errors(dep, all, true,
50
- dep.prerelease?)
61
+ if platform then
62
+ filtered = specs_and_sources.select { |s,| s.platform == platform }
63
+ specs_and_sources = filtered unless filtered.empty?
64
+ end
51
65
 
52
66
  spec, source_uri = specs_and_sources.sort_by { |s,| s.version }.last
53
67
 
@@ -121,10 +121,12 @@ class LibGems::Commands::UpdateCommand < LibGems::Command
121
121
  gem_names.all? { |name| /#{name}/ !~ l_spec.name }
122
122
 
123
123
  dependency = LibGems::Dependency.new l_spec.name, "> #{l_spec.version}"
124
+ dependency.prerelease = options[:prerelease]
124
125
 
125
126
  begin
126
127
  fetcher = LibGems::SpecFetcher.fetcher
127
- spec_tuples = fetcher.find_matching dependency
128
+ spec_tuples = fetcher.find_matching dependency, false, true,
129
+ options[:prerelease]
128
130
  rescue LibGems::RemoteFetcher::FetchError => e
129
131
  raise unless fetcher.warn_legacy e do
130
132
  require 'libgems/source_info_cache'
@@ -201,7 +201,7 @@ class LibGems::DependencyList
201
201
  # +ignored+.
202
202
 
203
203
  def active_count(specs, ignored)
204
- specs.count { |spec| ignored[spec.full_name].nil? }
204
+ specs.inject(0) {|c, spec| ignored[spec.full_name].nil? ? c + 1 : c }
205
205
  end
206
206
 
207
207
  end
@@ -338,6 +338,17 @@ class LibGems::Installer
338
338
  ##
339
339
  # Generates a #! line for +bin_file_name+'s wrapper copying arguments if
340
340
  # necessary.
341
+ #
342
+ # If the :custom_shebang config is set, then it is used as a template
343
+ # for how to create the shebang used for to run a gem's executables.
344
+ #
345
+ # The template supports 4 expansions:
346
+ #
347
+ # $env the path to the unix env utility
348
+ # $ruby the path to the currently running ruby interpreter
349
+ # $exec the path to the gem's executable
350
+ # $name the name of the gem the executable is for
351
+ #
341
352
 
342
353
  def shebang(bin_file_name)
343
354
  ruby_name = LibGems::ConfigMap[:ruby_install_name] if @env_shebang
@@ -351,6 +362,25 @@ class LibGems::Installer
351
362
  shebang.strip! # Avoid nasty ^M issues.
352
363
  end
353
364
 
365
+ if which = LibGems.configuration[:custom_shebang]
366
+ which = which.gsub(/\$(\w+)/) do
367
+ case $1
368
+ when "env"
369
+ @env_path ||= ENV_PATHS.find do |env_path|
370
+ File.executable? env_path
371
+ end
372
+ when "ruby"
373
+ "#{LibGems.ruby}#{opts}"
374
+ when "exec"
375
+ bin_file_name
376
+ when "name"
377
+ spec.name
378
+ end
379
+ end
380
+
381
+ return "#!#{which}"
382
+ end
383
+
354
384
  if not ruby_name then
355
385
  "#!#{LibGems.ruby}#{opts}"
356
386
  elsif opts then
@@ -1,5 +1,24 @@
1
1
  require "libgems/version"
2
2
 
3
+ # Hack to handle syck's DefaultKey bug with psych
4
+ #
5
+ # Quick note! If/when psych loads in 1.9, it will redefine
6
+ # YAML to point to Psych by removing the YAML constant.
7
+ # Thusly, over in LibGems.load_yaml, we define DefaultKey again
8
+ # after proper yaml library has been loaded.
9
+ #
10
+ # All this is so that there is always a YAML::Syck::DefaultKey
11
+ # class no matter if the full yaml library has loaded or not.
12
+ #
13
+ module YAML
14
+ if !defined? Syck
15
+ module Syck
16
+ class DefaultKey
17
+ end
18
+ end
19
+ end
20
+ end
21
+
3
22
  ##
4
23
  # A Requirement is a set of one or more version restrictions. It supports a
5
24
  # few (<tt>=, !=, >, <, >=, <=, ~></tt>) different restriction operators.
@@ -115,6 +134,13 @@ class LibGems::Requirement
115
134
 
116
135
  def marshal_load array # :nodoc:
117
136
  @requirements = array[0]
137
+
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
118
144
  end
119
145
 
120
146
  def prerelease?
@@ -6,19 +6,19 @@ SIMPLE_GEM = <<-GEMDATA
6
6
  options = {}
7
7
  ARGV.options do |opts|
8
8
  opts.on_tail("--help", "show this message") {puts opts; exit}
9
- opts.on('--dir=DIRNAME', "Installation directory for the LibGems") {|options[:directory]|}
10
- opts.on('--force', "Force LibGems to intall, bypassing dependency checks") {|options[:force]|}
11
- opts.on('--gen-rdoc', "Generate RDoc documentation for the LibGems") {|options[:gen_rdoc]|}
9
+ opts.on('--dir=DIRNAME', "Installation directory for the Gem") {|options[:directory]|}
10
+ opts.on('--force', "Force Gem to intall, bypassing dependency checks") {|options[:force]|}
11
+ opts.on('--gen-rdoc', "Generate RDoc documentation for the Gem") {|options[:gen_rdoc]|}
12
12
  opts.parse!
13
13
  end
14
14
 
15
- require 'libgems'
16
- @directory = options[:directory] || LibGems.dir
15
+ require 'rubygems'
16
+ @directory = options[:directory] || Gem.dir
17
17
  @force = options[:force]
18
18
 
19
- gem = LibGems::Installer.new(__FILE__).install(@force, @directory)
19
+ gem = Gem::Installer.new(__FILE__).install(@force, @directory)
20
20
  if options[:gen_rdoc]
21
- LibGems::DocManager.new(gem).generate_rdoc
21
+ Gem::DocManager.new(gem).generate_rdoc
22
22
  end
23
23
  end
24
24
 
@@ -52,6 +52,30 @@ class TestGemCommandsFetchCommand < RubyGemTestCase
52
52
  "#{@a2_pre.full_name} not fetched"
53
53
  end
54
54
 
55
+ def test_execute_specific_prerelease
56
+ util_setup_fake_fetcher true
57
+ util_clear_gems
58
+ util_setup_spec_fetcher @a2, @a2_pre
59
+
60
+ @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
61
+ File.read(File.join(@gemhome, 'cache', @a2.file_name))
62
+ @fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] =
63
+ File.read(File.join(@gemhome, 'cache', @a2_pre.file_name))
64
+
65
+ @cmd.options[:args] = [@a2.name]
66
+ @cmd.options[:prerelease] = true
67
+ @cmd.options[:version] = "2.a"
68
+
69
+ use_ui @ui do
70
+ Dir.chdir @tempdir do
71
+ @cmd.execute
72
+ end
73
+ end
74
+
75
+ assert File.exist?(File.join(@tempdir, @a2_pre.file_name)),
76
+ "#{@a2_pre.full_name} not fetched"
77
+ end
78
+
55
79
  def test_execute_version
56
80
  util_setup_fake_fetcher
57
81
  util_setup_spec_fetcher @a1, @a2
@@ -15,16 +15,18 @@ class TestGemCommandsUpdateCommand < RubyGemTestCase
15
15
  @cmd.options[:generate_ri] = false
16
16
 
17
17
  util_setup_fake_fetcher
18
+ util_setup_spec_fetcher @a1, @a2, @a3a
18
19
 
19
20
  @a1_path = File.join @gemhome, 'cache', @a1.file_name
20
21
  @a2_path = File.join @gemhome, 'cache', @a2.file_name
21
-
22
- util_setup_spec_fetcher @a1, @a2
22
+ @a3a_path = File.join @gemhome, 'cache', @a3a.file_name
23
23
 
24
24
  @fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] =
25
25
  read_binary @a1_path
26
26
  @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
27
27
  read_binary @a2_path
28
+ @fetcher.data["#{@gem_repo}gems/#{@a3a.file_name}"] =
29
+ read_binary @a3a_path
28
30
  end
29
31
 
30
32
  def teardown
@@ -186,6 +188,27 @@ class TestGemCommandsUpdateCommand < RubyGemTestCase
186
188
  assert_empty out
187
189
  end
188
190
 
191
+ def test_execute_named_up_to_date_prerelease
192
+ util_clear_gems
193
+
194
+ LibGems::Installer.new(@a2_path).install
195
+
196
+ @cmd.options[:args] = [@a2.name]
197
+ @cmd.options[:prerelease] = true
198
+
199
+ use_ui @ui do
200
+ @cmd.execute
201
+ end
202
+
203
+ out = @ui.output.split "\n"
204
+ assert_equal "Updating installed gems", out.shift
205
+ assert_equal "Updating #{@a3a.name}", out.shift
206
+ assert_equal "Successfully installed #{@a3a.full_name}", out.shift
207
+ assert_equal "Gems updated: #{@a3a.name}", out.shift
208
+
209
+ assert_empty out
210
+ end
211
+
189
212
  def test_execute_up_to_date
190
213
  util_clear_gems
191
214
 
@@ -1,6 +1,31 @@
1
1
  require File.expand_path('../gem_installer_test_case', __FILE__)
2
2
 
3
3
  class TestGemInstaller < LibGemsInstallerTestCase
4
+
5
+ class StubbedConfigFile < LibGems::ConfigFile
6
+ def load_file(filename) {} end
7
+ end
8
+
9
+ def setup
10
+ super
11
+ if !defined?(@@test_num)
12
+ @@test_num = 0
13
+ @@total_tests = self.class.test_methods.size
14
+ @@config = LibGems.configuration
15
+ end
16
+ LibGems.configuration = StubbedConfigFile.new([])
17
+ LibGems.send(:set_home, @gemhome) # Config clears this
18
+ end
19
+
20
+ def run(runner)
21
+ result = super
22
+ ensure
23
+ @@test_num += 1
24
+ if @@test_num == @@total_tests
25
+ LibGems.configuration = @@config
26
+ end
27
+ result
28
+ end
4
29
 
5
30
  def test_app_script_text
6
31
  util_make_exec '2', ''
@@ -527,7 +552,7 @@ load LibGems.bin_path('a', 'my_exec', version)
527
552
  end
528
553
 
529
554
  LibGems.post_install do |installer|
530
- assert File.exist?(cache_file), 'cache file should exist'
555
+ assert File.exist?(cache_file), "cache file should exist: #{cache_file}"
531
556
  end
532
557
 
533
558
  build_rake_in do
@@ -640,7 +665,7 @@ load LibGems.bin_path('a', 'my_exec', version)
640
665
  assert File.exist?(gemdir)
641
666
 
642
667
  exe = File.join(gemdir, 'bin', 'executable')
643
- assert File.exist?(exe)
668
+ assert File.exist?(exe), "#{exe} should exist"
644
669
  exe_mode = File.stat(exe).mode & 0111
645
670
  assert_equal 0111, exe_mode, "0%o" % exe_mode unless win_platform?
646
671
  assert File.exist?(File.join(gemdir, 'lib', 'code.rb'))
@@ -817,6 +842,36 @@ load LibGems.bin_path('a', 'my_exec', version)
817
842
  assert_equal "#!#{LibGems.ruby} -ws", shebang
818
843
  end
819
844
 
845
+ def test_shebang_custom
846
+ LibGems.configuration[:custom_shebang] = 'test'
847
+
848
+ util_make_exec '2', "#!/usr/bin/ruby"
849
+
850
+ shebang = @installer.shebang 'my_exec'
851
+
852
+ assert_equal "#!test", shebang
853
+ end
854
+
855
+ def test_shebang_custom_with_expands
856
+ LibGems.configuration[:custom_shebang] = '1 $env 2 $ruby 3 $exec 4 $name'
857
+
858
+ util_make_exec '2', "#!/usr/bin/ruby"
859
+
860
+ shebang = @installer.shebang 'my_exec'
861
+
862
+ assert_equal "#!1 /usr/bin/env 2 #{LibGems.ruby} 3 my_exec 4 a", shebang
863
+ end
864
+
865
+ def test_shebang_custom_with_expands_and_arguments
866
+ LibGems.configuration[:custom_shebang] = '1 $env 2 $ruby 3 $exec'
867
+
868
+ util_make_exec '2', "#!/usr/bin/ruby -ws"
869
+
870
+ shebang = @installer.shebang 'my_exec'
871
+
872
+ assert_equal "#!1 /usr/bin/env 2 #{LibGems.ruby} -ws 3 my_exec", shebang
873
+ end
874
+
820
875
  def test_unpack
821
876
  util_setup_gem
822
877
 
@@ -1,8 +1,7 @@
1
- require 'rubygems/test_case' # Looks like it's defined somewhere else
2
1
  require 'libgems/user_interaction'
3
2
  require 'timeout'
4
3
 
5
- class TestGemSilentUI < Gem::TestCase
4
+ class TestGemSilentUI < RubyGemTestCase
6
5
 
7
6
  def setup
8
7
  super
@@ -49,7 +48,7 @@ class TestGemSilentUI < Gem::TestCase
49
48
 
50
49
  assert_empty out, 'No output'
51
50
  assert_empty err, 'No output'
52
-
51
+
53
52
  out, err = capture_io do
54
53
  use_ui @sui do
55
54
  value = @sui.ask_yes_no 'Problem?', true
@@ -60,7 +59,7 @@ class TestGemSilentUI < Gem::TestCase
60
59
  assert_empty err, 'No output'
61
60
 
62
61
  assert value, 'Value is true'
63
-
62
+
64
63
  out, err = capture_io do
65
64
  use_ui @sui do
66
65
  value = @sui.ask_yes_no 'Problem?', false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libgems
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
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: 2011-07-06 00:00:00.000000000Z
15
+ date: 2011-08-10 00:00:00.000000000Z
16
16
  dependencies: []
17
17
  description: ! "# SlimGems\n\n* Website: http://slimgems.github.com/\n* Github: http://github.com/slimgems/slimgems\n*
18
18
  Get gems from: http://rubygems.org\n\n## Description\n\nSlimGems is a drop-in replacement
@@ -229,7 +229,6 @@ files:
229
229
  - test/test_kernel.rb
230
230
  - History.txt
231
231
  - LICENSE.txt
232
- - blah.rb
233
232
  - README.md
234
233
  - Rakefile
235
234
  - ChangeLog
data/blah.rb DELETED
@@ -1,5 +0,0 @@
1
- module Blah
2
- def self.hi
3
- puts "hi"
4
- end
5
- end