faster_gem_script 0.1.2 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README +49 -41
- data/Rakefile +13 -0
- data/VERSION +1 -0
- data/bin/faster_gem_script +8 -8
- data/ext/mkrf_conf.rb +19 -0
- data/lib/faster_gem_scripts.rb +18 -3
- data/lib/rubygems_plugin.rb +18 -0
- data/lib/template +6 -4
- data/spec/{spec.rb → spec.faster_gem_scripts.rb} +10 -3
- metadata +22 -6
data/README
CHANGED
@@ -1,41 +1,49 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
C
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
1
|
+
<<<<<<< HEAD
|
2
|
+
This is a utility to speedup gem scripts quite a bit (especially for windows users), by avoiding expensive rubygems calls.
|
3
|
+
|
4
|
+
Background:
|
5
|
+
|
6
|
+
By default rubygems runs a
|
7
|
+
|
8
|
+
require rubygems
|
9
|
+
...
|
10
|
+
load Gem.bin_path(...)
|
11
|
+
|
12
|
+
in every gem's auto-generated startup script (ex: the ruby-prof gem has a ruby-prof command--it runs the above before running that command).
|
13
|
+
|
14
|
+
This is great if you have a complex gem that requires specific version of its dependencies, etc.
|
15
|
+
|
16
|
+
However, these calls result in an extra slowdown--especially in windows it can take up to an extra 2s, EVERY TIME, at startup.
|
17
|
+
|
18
|
+
This can be alleviated, however, with this gem.
|
19
|
+
|
20
|
+
In my box 2s went down to 0.37s (1.9.1 mingw). In linux it can speedup a tidge, too (from 0.3 to 0.16s).
|
21
|
+
|
22
|
+
How it does it:
|
23
|
+
|
24
|
+
This gem provides a utility to replace the auto-generated startup script with one that caches the bin_path location so that the second/third/fourth times it starts up almost instantly.
|
25
|
+
|
26
|
+
This works in 1.9 because of gem_prelude (which makes loading rubygems at times unnecessary), and of the "faster_rubygems" gem for 1.8.x, which is essentially gem_prelude for 1.8.
|
27
|
+
|
28
|
+
How to use it:
|
29
|
+
|
30
|
+
# install a gem that has a command line executable, like ruby-prof
|
31
|
+
|
32
|
+
# install a gem pre-req--necessary because of a bug in rubygems
|
33
|
+
C:> gem install os
|
34
|
+
# install the optimizer
|
35
|
+
C:> gem install faster_gem_scripts
|
36
|
+
# this next line will change based on your ruby location
|
37
|
+
C:> faster_gem_script c:\ruby18\bin\whichr
|
38
|
+
|
39
|
+
If you want an easier way to discover the path for your commands (and are on windows), you can checkout the whichr gem (http://github.com/rdp/whichr).
|
40
|
+
|
41
|
+
Caveat: If you update a gem after using this, you'll need to run it again so that it will be sure to cache the location of the latest version of the gem.
|
42
|
+
|
43
|
+
Other caveat: if your gem has any "complex dependencies" (like it uses the gem command like
|
44
|
+
|
45
|
+
gem 'some_other_dependency', '= 1.1.9'
|
46
|
+
|
47
|
+
then this system won't work for you. Try it out to see.
|
48
|
+
|
49
|
+
You can find out by running it once. If it fails then reinstall the gem to get back to its original functionality.
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'jeweler'
|
2
|
+
Jeweler::Tasks.new do |gemspec|
|
3
|
+
gemspec.name = "faster_gem_script"
|
4
|
+
gemspec.summary = "A utility to make ruby \"command line scripts\" run much faster by using gem prelude instead of full rubygems"
|
5
|
+
gemspec.email = "rogerdpack@gmail.com"
|
6
|
+
gemspec.homepage = "http://github.com/rdp/faster_gem_scripts"
|
7
|
+
gemspec.authors = ["Roger Pack"]
|
8
|
+
gemspec.add_dependency('sane', '>= 0.17.0')
|
9
|
+
gemspec.add_dependency('fast_require')
|
10
|
+
gemspec.add_development_dependency('rspec')
|
11
|
+
# don't need faster_rubygems here, as we auto install it
|
12
|
+
gemspec.extensions = 'ext/mkrf_conf.rb'
|
13
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.4
|
data/bin/faster_gem_script
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
if ARGV.length == 0
|
4
|
-
puts
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'faster_gem_scripts'
|
3
|
+
if ARGV.length == 0
|
4
|
+
puts 'syntax: script_name_to_optimize'
|
5
|
+
else
|
6
|
+
FasterGemScripts.overwrite ARGV[0]
|
7
|
+
end
|
8
|
+
|
data/ext/mkrf_conf.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rubygems/command.rb'
|
3
|
+
require 'rubygems/dependency_installer.rb'
|
4
|
+
begin
|
5
|
+
Gem::Command.build_args = ARGV
|
6
|
+
rescue NoMethodError
|
7
|
+
end
|
8
|
+
inst = Gem::DependencyInstaller.new
|
9
|
+
begin
|
10
|
+
if RUBY_VERSION < "1.9" # need the helper
|
11
|
+
inst.install "faster_rubygems"
|
12
|
+
end
|
13
|
+
rescue
|
14
|
+
exit(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
f = File.open(File.join(File.dirname(__FILE__), "Rakefile"), "w") # create dummy rakefile to indicate success
|
18
|
+
f.write("task :default\n")
|
19
|
+
f.close
|
data/lib/faster_gem_scripts.rb
CHANGED
@@ -3,9 +3,24 @@ require 'sane'
|
|
3
3
|
class FasterGemScripts
|
4
4
|
def self.overwrite full_path
|
5
5
|
contents_should_be = File.read __dir__ + '/template'
|
6
|
-
File.
|
7
|
-
|
8
|
-
|
6
|
+
if File.file?(full_path)
|
7
|
+
puts 'faster_gem_scripts: optimizing ' + full_path + '...'
|
8
|
+
File.write(full_path, contents_should_be)
|
9
|
+
bin_loc = full_path + '_bin_location'
|
10
|
+
File.delete(bin_loc) if File.exist?(bin_loc)
|
11
|
+
else
|
12
|
+
puts "unable to find the binary:" + full_path + " you may want to find it and overwrite it yourself using C:\>faster_gem_script file_name (no .bat)"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.clear_caches!
|
17
|
+
# I only know about one type...
|
18
|
+
bin_dir = OS.ruby_bin.split('/')[0..-2].join('/') # strip off ruby.exe
|
19
|
+
Dir[bin_dir = '/*_bin_location'].each{|file|
|
20
|
+
puts 'deleting'
|
21
|
+
File.delete file
|
22
|
+
}
|
23
|
+
|
9
24
|
end
|
10
25
|
|
11
26
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Gem.post_install { |gem_installer_instance|
|
2
|
+
require 'os'
|
3
|
+
require 'faster_gem_scripts'
|
4
|
+
all = gem_installer_instance.spec.files.select{|file| file.start_with? "bin" }
|
5
|
+
bin_dir = OS.ruby_bin.split('/')[0..-3].join('/')
|
6
|
+
if all.length > 0
|
7
|
+
FasterGemScripts.clear_caches!
|
8
|
+
all.each{|script_name|
|
9
|
+
name = bin_dir + '/' + script_name
|
10
|
+
FasterGemScripts.overwrite name
|
11
|
+
}
|
12
|
+
end
|
13
|
+
}
|
14
|
+
|
15
|
+
Gem.post_uninstall {
|
16
|
+
require 'faster_gem_scripts'
|
17
|
+
FasterGemScripts.clear_caches! if (gem_installer_instance.spec.files.select{|file| file.start_with? "bin" }.length > 0)
|
18
|
+
}
|
data/lib/template
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
gem_name = File.basename(__FILE__)
|
2
2
|
|
3
3
|
if ARGV.first =~ /^_(.*)_$/
|
4
|
-
# special version of the gem--we'll need full rubygems for this
|
4
|
+
# special version of the gem--we'll need full rubygems for this...
|
5
5
|
require 'rubygems'
|
6
6
|
if Gem::Version.correct? $1 then
|
7
7
|
version = $1
|
@@ -14,14 +14,16 @@ end
|
|
14
14
|
|
15
15
|
cached = File.dirname(__FILE__) + "/#{gem_name}_bin_location"
|
16
16
|
|
17
|
-
|
17
|
+
# if we haven't cached its location yet...
|
18
18
|
unless File.exist? cached
|
19
19
|
File.open(cached, 'w') do |f|
|
20
|
+
# then setup the cache
|
21
|
+
puts 'faster_gem_script cacheing bin location (1st time only) ' + __FILE__
|
20
22
|
require 'rubygems'
|
21
23
|
f.write Gem.bin_path(gem_name, gem_name, ">= 0")
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
25
27
|
require 'faster_rubygems' if RUBY_VERSION < '1.9' # gem prelude equivalent
|
26
|
-
|
27
|
-
load File.read(cached)
|
28
|
+
require 'fast_require' # happiness
|
29
|
+
load File.read(cached)
|
@@ -1,11 +1,14 @@
|
|
1
|
+
require 'faster_rubygems' if RUBY_VERSION < '1.9'
|
1
2
|
require 'sane'
|
2
|
-
|
3
|
+
require_relative '../lib/faster_gem_scripts'
|
3
4
|
require 'spec/autorun'
|
5
|
+
require 'fileutils'
|
4
6
|
|
5
|
-
describe "
|
7
|
+
describe "faster rubygems" do
|
6
8
|
|
7
9
|
def setup
|
8
10
|
File.delete 'abc' if File.exist?('abc')
|
11
|
+
FileUtils.touch 'abc'
|
9
12
|
FasterGemScripts.overwrite 'abc'
|
10
13
|
end
|
11
14
|
|
@@ -15,11 +18,15 @@ describe "rewriter" do
|
|
15
18
|
assert new_contents.contain?("faster_rubygems")
|
16
19
|
end
|
17
20
|
|
18
|
-
it "should nuke the cache on write" do
|
21
|
+
it "should nuke the old cache on re-write" do
|
19
22
|
require 'fileutils'
|
20
23
|
FileUtils.touch 'abc_bin_location'
|
21
24
|
setup
|
22
25
|
assert !File.exist?('abc_bin_location')
|
23
26
|
end
|
27
|
+
|
28
|
+
it "should overwrite on gem install"
|
29
|
+
|
30
|
+
|
24
31
|
|
25
32
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faster_gem_script
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roger Pack
|
@@ -9,13 +9,23 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-29 00:00:00 -07:00
|
13
13
|
default_executable: faster_gem_script
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: sane
|
17
17
|
type: :runtime
|
18
18
|
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.17.0
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: fast_require
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
19
29
|
version_requirements: !ruby/object:Gem::Requirement
|
20
30
|
requirements:
|
21
31
|
- - ">="
|
@@ -36,14 +46,20 @@ description:
|
|
36
46
|
email: rogerdpack@gmail.com
|
37
47
|
executables:
|
38
48
|
- faster_gem_script
|
39
|
-
extensions:
|
40
|
-
|
49
|
+
extensions:
|
50
|
+
- ext/mkrf_conf.rb
|
41
51
|
extra_rdoc_files:
|
42
52
|
- README
|
43
53
|
files:
|
54
|
+
- README
|
55
|
+
- Rakefile
|
56
|
+
- VERSION
|
57
|
+
- bin/faster_gem_script
|
58
|
+
- ext/mkrf_conf.rb
|
44
59
|
- lib/faster_gem_scripts.rb
|
60
|
+
- lib/rubygems_plugin.rb
|
45
61
|
- lib/template
|
46
|
-
-
|
62
|
+
- spec/spec.faster_gem_scripts.rb
|
47
63
|
has_rdoc: true
|
48
64
|
homepage: http://github.com/rdp/faster_gem_scripts
|
49
65
|
licenses: []
|
@@ -73,4 +89,4 @@ signing_key:
|
|
73
89
|
specification_version: 3
|
74
90
|
summary: A utility to make ruby "command line scripts" run much faster by using gem prelude instead of full rubygems
|
75
91
|
test_files:
|
76
|
-
- spec/spec.rb
|
92
|
+
- spec/spec.faster_gem_scripts.rb
|