xgem 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/xgem +40 -5
- data/bin/xgem-ruby +1 -1
- metadata +1 -1
data/bin/xgem
CHANGED
@@ -4,6 +4,7 @@ xgem_root = File.expand_path("#{File.expand_path(__FILE__)}/../..")
|
|
4
4
|
|
5
5
|
commands = {
|
6
6
|
"refresh" => -> {
|
7
|
+
require "rubygems"
|
7
8
|
require "fileutils"
|
8
9
|
|
9
10
|
puts "Refreshing xgem cache..."
|
@@ -11,6 +12,7 @@ commands = {
|
|
11
12
|
current = 0
|
12
13
|
suffixes = Gem.suffixes.map { |s| Regexp.new("#{Regexp.escape s}\\z") }
|
13
14
|
require_map = {}
|
15
|
+
executables = {}
|
14
16
|
|
15
17
|
print "0/#{total}"
|
16
18
|
|
@@ -27,35 +29,65 @@ commands = {
|
|
27
29
|
end
|
28
30
|
end
|
29
31
|
end
|
32
|
+
spec.executables.each do |executable|
|
33
|
+
if File.file? "#{spec.bin_dir}/#{executable}"
|
34
|
+
executables[executable] = "#{spec.bin_dir}/#{executable}"
|
35
|
+
end
|
36
|
+
end
|
30
37
|
print "\r#{current += 1}/#{total}"
|
31
38
|
end
|
32
39
|
|
33
40
|
File.write "#{xgem_root}/data/require_paths", Marshal.dump(require_map)
|
41
|
+
File.write "#{xgem_root}/data/executables", Marshal.dump(executables)
|
34
42
|
puts "\rReady to rock and roll!"
|
35
43
|
},
|
36
44
|
|
37
45
|
"install" => -> {
|
38
46
|
print "Installing xgem-ruby executable... "
|
39
47
|
|
40
|
-
|
48
|
+
# overwrite RubyGem's wrapper with a shell script
|
49
|
+
wrapper_script = <<-XGEMRUBY.gsub(/^ /,"")
|
41
50
|
#!/bin/bash
|
42
51
|
|
43
52
|
xgem_root="#{__FILE__.inspect[1...-1]}/../.."
|
44
53
|
|
45
54
|
ruby --disable-gems -I "$xgem_root/lib" -r xgem $@
|
46
|
-
|
55
|
+
XGEMRUBY
|
56
|
+
File.write "#{$0}-ruby", wrapper_script
|
57
|
+
File.write "#{File.expand_path __FILE__}-ruby", wrapper_script
|
58
|
+
|
59
|
+
puts "ok!"
|
60
|
+
|
61
|
+
print "Making 'xgem' use 'xgem-ruby'... "
|
62
|
+
|
63
|
+
File.write "#{$0}", <<-XGEM.gsub(/^ /,"")
|
64
|
+
#!/bin/bash
|
65
|
+
|
66
|
+
ruby --disable-gems #{File.expand_path(__FILE__).inspect} $@
|
67
|
+
XGEM
|
47
68
|
|
48
69
|
puts "ok!"
|
49
70
|
|
50
71
|
commands["refresh"].call
|
72
|
+
},
|
73
|
+
|
74
|
+
"do" => ->(executable, *args) {
|
75
|
+
executables = Marshal.load File.open("#{xgem_root}/data/executables", "rb") { |f| f.read }
|
76
|
+
if executables[executable]
|
77
|
+
exec "#{$0}-ruby", executables[executable], *args
|
78
|
+
else
|
79
|
+
puts "Unknown executable '#{executable}'. Perhaps try running 'xgem refresh'?"
|
80
|
+
exit 1
|
81
|
+
end
|
51
82
|
}
|
52
83
|
}
|
53
84
|
|
54
|
-
|
55
|
-
|
85
|
+
cmd, *cmd_args = ARGV
|
86
|
+
if commands[cmd] and commands[cmd].parameters.take_while { |x,_| x == :req }.count <= cmd_args.count
|
87
|
+
commands[cmd].call *cmd_args
|
56
88
|
else
|
57
89
|
puts <<-USAGE.gsub(/^ /,"")
|
58
|
-
Usage: xgem <command>
|
90
|
+
Usage: xgem <command> [<args>...]
|
59
91
|
|
60
92
|
Available commands are:
|
61
93
|
|
@@ -67,6 +99,9 @@ else
|
|
67
99
|
order to use the 'xgem-ruby' command. Note that this will not
|
68
100
|
modify your system in any way that isn't undoable by running
|
69
101
|
'gem uninstall xgem'.
|
102
|
+
|
103
|
+
do - Runs an executable provided by a gem. For example
|
104
|
+
'xgem do rails server'
|
70
105
|
|
71
106
|
USAGE
|
72
107
|
end
|
data/bin/xgem-ruby
CHANGED