rip 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +2 -1
- data/bin/rip +1 -0
- data/lib/rip.rb +3 -2
- data/lib/rip/commands/build.rb +3 -1
- data/lib/rip/commands/core.rb +2 -3
- data/lib/rip/commands/install.rb +2 -1
- data/lib/rip/commands/show.rb +28 -0
- data/lib/rip/installer.rb +4 -2
- data/lib/rip/package_manager.rb +8 -0
- data/lib/rip/packages/gem_package.rb +6 -8
- data/lib/rip/packages/remote_gem_package.rb +13 -16
- data/lib/rip/sh/gem.rb +39 -0
- data/lib/rip/ui.rb +6 -1
- data/lib/rip/version.rb +1 -1
- metadata +4 -2
data/README.markdown
CHANGED
@@ -281,7 +281,7 @@ Currently it's UNIX-only. This is because Rip needs to manipulate the RUBYLIB
|
|
281
281
|
and PATH environment variables so that Ruby knows where to find installed Rip
|
282
282
|
packages.
|
283
283
|
|
284
|
-
As a result, the setup script expects you to be running bash or
|
284
|
+
As a result, the setup script expects you to be running bash, zshell, or fish.
|
285
285
|
|
286
286
|
Contributors
|
287
287
|
------------
|
@@ -305,6 +305,7 @@ Contributors
|
|
305
305
|
* Andre Arko
|
306
306
|
* Rick Olson
|
307
307
|
* Ben Burkert
|
308
|
+
* James Adam
|
308
309
|
|
309
310
|
Special Thanks
|
310
311
|
--------------
|
data/bin/rip
CHANGED
data/lib/rip.rb
CHANGED
@@ -12,7 +12,7 @@ module Rip
|
|
12
12
|
else
|
13
13
|
dir = File.expand_path(env)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
FileUtils.mkdir_p dir unless File.exists? dir
|
17
17
|
@dir = dir
|
18
18
|
end
|
@@ -28,7 +28,7 @@ module Rip
|
|
28
28
|
def self.ui=(io)
|
29
29
|
@ui = Rip::UI.new(io)
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
def self.user_home
|
33
33
|
@home ||= ENV['HOME']
|
34
34
|
end
|
@@ -47,6 +47,7 @@ require 'rip/package'
|
|
47
47
|
require 'rip/package_manager'
|
48
48
|
require 'rip/setup'
|
49
49
|
require 'rip/sh/git'
|
50
|
+
require 'rip/sh/gem'
|
50
51
|
|
51
52
|
|
52
53
|
# load rip packages - order is important
|
data/lib/rip/commands/build.rb
CHANGED
@@ -5,6 +5,8 @@
|
|
5
5
|
|
6
6
|
module Rip
|
7
7
|
module Commands
|
8
|
+
o 'rip build PACKAGE'
|
9
|
+
x "Attempts to build a package using extconf.rb"
|
8
10
|
def build(options={}, *packages)
|
9
11
|
packages.each do |package_name|
|
10
12
|
package = manager.package(package_name)
|
@@ -20,7 +22,7 @@ module Rip
|
|
20
22
|
Dir.chdir(build_dir) do
|
21
23
|
system "ruby extconf.rb"
|
22
24
|
system "make clean"
|
23
|
-
system "make install
|
25
|
+
system "make install sitearchdir=#{manager.dir}/lib"
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
data/lib/rip/commands/core.rb
CHANGED
@@ -37,8 +37,7 @@ module Rip
|
|
37
37
|
end
|
38
38
|
|
39
39
|
o 'rip use RIPENV'
|
40
|
-
x '
|
41
|
-
x 'Shortcut for `rip env use`'
|
40
|
+
x 'Activates a ripenv. Shortcut for `rip env use`.'
|
42
41
|
def use(options = {}, ripenv = nil, *args)
|
43
42
|
puts 'ripenv: ' + Rip::Env.use(ripenv.to_s)
|
44
43
|
end
|
@@ -63,7 +62,7 @@ module Rip
|
|
63
62
|
method =~ /-/ || %w( help version ).include?(method)
|
64
63
|
end
|
65
64
|
|
66
|
-
show_help nil, commands
|
65
|
+
show_help nil, commands.sort
|
67
66
|
|
68
67
|
ui.puts
|
69
68
|
ui.puts "For more information on a a command use:"
|
data/lib/rip/commands/install.rb
CHANGED
@@ -19,12 +19,13 @@ module Rip
|
|
19
19
|
end
|
20
20
|
|
21
21
|
package = Rip::Package.for(source, version)
|
22
|
-
installed_package = manager.package(package.name)
|
23
22
|
|
24
23
|
if !package
|
25
24
|
ui.abort "I don't know how to install #{source}"
|
26
25
|
end
|
27
26
|
|
27
|
+
installed_package = manager.package(package.name)
|
28
|
+
|
28
29
|
if options[:f] && installed_package
|
29
30
|
Installer.new.uninstall(installed_package) if installed_package.installed?
|
30
31
|
Installer.new.install(package)
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Rip
|
2
|
+
module Commands
|
3
|
+
o 'rip show PACKAGE'
|
4
|
+
x 'Displays information about an installed package'
|
5
|
+
def show(options = {}, name = nil, *args)
|
6
|
+
if name.to_s.empty?
|
7
|
+
ui.abort "Please give me the name of a package."
|
8
|
+
end
|
9
|
+
|
10
|
+
installed_package = manager.package(name)
|
11
|
+
if installed_package.nil?
|
12
|
+
ui.abort "The package '#{name}' doesn't seem to be installed"
|
13
|
+
end
|
14
|
+
|
15
|
+
ui.puts installed_package
|
16
|
+
ui.puts "Depends on: #{display_package_list(manager.dependencies_for(name))}"
|
17
|
+
ui.puts "Required by: #{display_package_list(manager.packages_that_depend_on(name))}"
|
18
|
+
|
19
|
+
ui.puts "Files:\n\t#{manager.files(name).join("\n\t")}" if options[:f]
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
def display_package_list(packages)
|
24
|
+
return "Nothing" unless packages && packages.any?
|
25
|
+
packages.join(", ")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/rip/installer.rb
CHANGED
@@ -25,8 +25,6 @@ module Rip
|
|
25
25
|
begin
|
26
26
|
installed = @installed[package.name] || package.installed?
|
27
27
|
|
28
|
-
manager.add_package(package, parent) unless package.meta_package?
|
29
|
-
|
30
28
|
return if installed
|
31
29
|
@installed[package.name] = package
|
32
30
|
|
@@ -36,6 +34,10 @@ module Rip
|
|
36
34
|
|
37
35
|
package.fetch
|
38
36
|
package.unpack
|
37
|
+
|
38
|
+
parent_package = (parent && parent.meta_package?) ? parent.actual_package : parent
|
39
|
+
manager.add_package(package, parent)
|
40
|
+
|
39
41
|
install_dependencies(package)
|
40
42
|
build_extensions(package)
|
41
43
|
copy_files(package)
|
data/lib/rip/package_manager.rb
CHANGED
@@ -91,6 +91,10 @@ module Rip
|
|
91
91
|
def packages_that_depend_on(name)
|
92
92
|
(@dependents[name] || []).map { |name| package(name) }
|
93
93
|
end
|
94
|
+
|
95
|
+
def dependencies_for(name)
|
96
|
+
(@dependencies[name] || []).map { |name| package(name) }
|
97
|
+
end
|
94
98
|
|
95
99
|
def files(name)
|
96
100
|
Array(@files[name])
|
@@ -112,6 +116,10 @@ module Rip
|
|
112
116
|
raise VersionConflict.new(name, version, parent, @versions[name], @dependents[name].to_a)
|
113
117
|
end
|
114
118
|
|
119
|
+
if parent && parent.meta_package? && parent.actual_package != package
|
120
|
+
parent = parent.actual_package
|
121
|
+
end
|
122
|
+
|
115
123
|
if parent && !parent.meta_package?
|
116
124
|
@dependents[name] ||= Set.new
|
117
125
|
@dependents[name].add(parent.name)
|
@@ -20,9 +20,7 @@ module Rip
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def exists?
|
23
|
-
|
24
|
-
ui.abort "you don't have #{gembin} installed"
|
25
|
-
end
|
23
|
+
ui.abort "can't find your gem command" unless Sh::Gem.check?
|
26
24
|
|
27
25
|
File.exists?(source)
|
28
26
|
end
|
@@ -32,7 +30,11 @@ module Rip
|
|
32
30
|
end
|
33
31
|
|
34
32
|
def unpack!
|
35
|
-
|
33
|
+
Sh::Gem.rgem("unpack '#{cache_file}' --target='#{packages_path}' > /dev/null")
|
34
|
+
end
|
35
|
+
|
36
|
+
def dependencies!
|
37
|
+
Sh::Gem.dependencies(name)
|
36
38
|
end
|
37
39
|
|
38
40
|
memoize :metadata
|
@@ -40,9 +42,5 @@ module Rip
|
|
40
42
|
parts = source.split('/').last.chomp('.gem').split('-')
|
41
43
|
{ :name => parts[0...-1].join('-'), :version => parts[-1] }
|
42
44
|
end
|
43
|
-
|
44
|
-
def gembin
|
45
|
-
ENV['GEMBIN'] || 'gem'
|
46
|
-
end
|
47
45
|
end
|
48
46
|
end
|
@@ -6,7 +6,7 @@ module Rip
|
|
6
6
|
RemoteGemPackage.new(source).exists?
|
7
7
|
end
|
8
8
|
|
9
|
-
@@remotes = %w( gems.github.com gems.rubyforge.org )
|
9
|
+
@@remotes = %w( gems.github.com gemcutter.org gems.rubyforge.org )
|
10
10
|
@@exists_cache = {}
|
11
11
|
|
12
12
|
def exists?
|
@@ -17,27 +17,24 @@ module Rip
|
|
17
17
|
|
18
18
|
Dir.chdir cache_path do
|
19
19
|
@@remotes.each do |remote|
|
20
|
-
|
20
|
+
# hack: every github gem has a dash in its name
|
21
|
+
next if remote =~ /github/ && !source.include?('-')
|
22
|
+
|
23
|
+
ui.vputs "Searching %s for %s..." % [ remote, source ]
|
21
24
|
|
22
25
|
source_flag = "--source=http://#{remote}/"
|
23
|
-
if rgem("fetch #{source} #{source_flag}") =~ /Downloaded (.+)/
|
26
|
+
if Sh::Gem.rgem("fetch #{source} #{source_flag}") =~ /Downloaded (.+)/
|
27
|
+
ui.vputs "Found #{source} at #{remote}"
|
24
28
|
@@exists_cache[source] = $1
|
25
29
|
return true
|
26
30
|
end
|
27
31
|
end
|
28
32
|
end
|
29
33
|
|
34
|
+
FileUtils.rm_rf cache_path
|
30
35
|
false
|
31
36
|
end
|
32
37
|
|
33
|
-
def rgem(command)
|
34
|
-
Timeout.timeout(5) do
|
35
|
-
`#{gembin} #{command}`
|
36
|
-
end
|
37
|
-
rescue Timeout::Error
|
38
|
-
''
|
39
|
-
end
|
40
|
-
|
41
38
|
def meta_package?
|
42
39
|
true
|
43
40
|
end
|
@@ -47,11 +44,15 @@ module Rip
|
|
47
44
|
|
48
45
|
def unpack!
|
49
46
|
installer = Installer.new
|
50
|
-
installer.install actual_package
|
47
|
+
installer.install actual_package, self
|
51
48
|
installer.manager.sources[actual_package.name] = source
|
52
49
|
installer.manager.save
|
53
50
|
end
|
54
51
|
|
52
|
+
def dependencies!
|
53
|
+
actual_package.dependencies
|
54
|
+
end
|
55
|
+
|
55
56
|
def version
|
56
57
|
actual_package ? actual_package.version : super
|
57
58
|
end
|
@@ -60,9 +61,5 @@ module Rip
|
|
60
61
|
def actual_package
|
61
62
|
Package.for(Dir[cache_path + '/*'].first)
|
62
63
|
end
|
63
|
-
|
64
|
-
def gembin
|
65
|
-
ENV['GEMBIN'] || 'gem'
|
66
|
-
end
|
67
64
|
end
|
68
65
|
end
|
data/lib/rip/sh/gem.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Rip
|
2
|
+
module Sh
|
3
|
+
module Gem
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def check?
|
7
|
+
`which #{gembin}`.strip.any?
|
8
|
+
end
|
9
|
+
|
10
|
+
def rgem(command)
|
11
|
+
Timeout.timeout(30) do
|
12
|
+
`#{gembin} #{command} 2> /dev/null`
|
13
|
+
end
|
14
|
+
rescue Timeout::Error
|
15
|
+
''
|
16
|
+
end
|
17
|
+
|
18
|
+
def dependencies(name)
|
19
|
+
if rgem("dependency #{name} --remote") =~ /(Gem #{name}-.*?)(Gem|\z)/m
|
20
|
+
$1.split("\n").grep(/runtime\s*\)/).map do |line|
|
21
|
+
line =~ /([\w-]+)\s*\([~><=]+\s*((?:\d+\.?)+\d+|\d)/
|
22
|
+
source, version = $1, $2
|
23
|
+
if source
|
24
|
+
Package.for(source, version)
|
25
|
+
else
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
end.compact
|
29
|
+
else
|
30
|
+
[]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def gembin
|
35
|
+
ENV['GEMBIN'] || 'gem'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/rip/ui.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module Rip
|
2
2
|
class UI
|
3
|
-
def initialize(io=nil)
|
3
|
+
def initialize(io = nil, verbose = false)
|
4
4
|
@io = io
|
5
|
+
@verbose = verbose
|
5
6
|
end
|
6
7
|
|
7
8
|
def puts(*args)
|
@@ -20,5 +21,9 @@ module Rip
|
|
20
21
|
def abort(msg)
|
21
22
|
@io && Kernel.abort("rip: #{msg}")
|
22
23
|
end
|
24
|
+
|
25
|
+
def vputs(*args)
|
26
|
+
puts(*args) if @verbose
|
27
|
+
end
|
23
28
|
end
|
24
29
|
end
|
data/lib/rip/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Wanstrath
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-13 00:00:00 -07:00
|
13
13
|
default_executable: ""
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- lib/rip/commands/install.rb
|
38
38
|
- lib/rip/commands/ruby.rb
|
39
39
|
- lib/rip/commands/setup.rb
|
40
|
+
- lib/rip/commands/show.rb
|
40
41
|
- lib/rip/commands/uninstall.rb
|
41
42
|
- lib/rip/env.rb
|
42
43
|
- lib/rip/help.rb
|
@@ -53,6 +54,7 @@ files:
|
|
53
54
|
- lib/rip/packages/remote_gem_package.rb
|
54
55
|
- lib/rip/packages/ripfile_package.rb
|
55
56
|
- lib/rip/setup.rb
|
57
|
+
- lib/rip/sh/gem.rb
|
56
58
|
- lib/rip/sh/git.rb
|
57
59
|
- lib/rip/ui.rb
|
58
60
|
- lib/rip/version.rb
|