package_manager 0.0.3 → 0.0.4
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.
- data/README.rdoc +8 -6
- data/Rakefile +21 -20
- data/bin/pkg-provides +1 -1
- data/lib/package_manager.rb +1 -1
- data/lib/package_manager/base.rb +8 -7
- data/lib/package_manager/port.rb +16 -0
- data/spec/platform_spec.rb +144 -0
- data/spec/script_methods_spec.rb +77 -0
- data/spec/subclasses_spec.rb +34 -0
- data/spec/version_spec.rb +17 -0
- metadata +14 -7
data/README.rdoc
CHANGED
@@ -5,13 +5,15 @@ Unifies the command interface for using yum and apt on Linux, Fink and MacPorts
|
|
5
5
|
= Commands
|
6
6
|
|
7
7
|
The following commands are provided:
|
8
|
-
* pkg-find-available
|
9
|
-
* pkg-find-installed
|
10
|
-
* pkg-install
|
11
|
-
* pkg-install-file
|
12
|
-
* pkg-list-contents
|
8
|
+
* pkg-find-available - list matching packages that are available for installation
|
9
|
+
* pkg-find-installed - list matching packages that are installed
|
10
|
+
* pkg-install - install the named package
|
11
|
+
* pkg-install-file - install a package from a file
|
12
|
+
* pkg-list-contents - list the files contained in an installed packages
|
13
|
+
* pkg-provides - which pakage installed the given file?
|
14
|
+
* pkg-uninstall - remove the named pakage from the system
|
13
15
|
|
14
|
-
= Package Management Systems[http://en.wikipedia.org/wiki/Package_management_system]
|
16
|
+
= {Package Management Systems}[http://en.wikipedia.org/wiki/Package_management_system]
|
15
17
|
|
16
18
|
* Fink
|
17
19
|
* Mac Ports
|
data/Rakefile
CHANGED
@@ -17,31 +17,32 @@ RDOC_OPTS = [ '--quiet', '--main', 'README.rdoc', '--inline-source' ]
|
|
17
17
|
EXECUTABLE_FILENAMES = EXECUTABLES.collect { | file | file.gsub( %r(^bin/), '' ) }
|
18
18
|
|
19
19
|
spec = Gem::Specification.new do |s|
|
20
|
-
s.name
|
21
|
-
s.summary
|
22
|
-
s.description
|
23
|
-
s.version
|
24
|
-
|
25
|
-
s.homepage
|
26
|
-
s.author
|
27
|
-
s.email
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
20
|
+
s.name = 'package_manager'
|
21
|
+
s.summary = TITLE
|
22
|
+
s.description = 'Unifies the command interface for using yum and apt on Linux, Fink and MacPorts on OS X'
|
23
|
+
s.version = PackageManager::VERSION::STRING
|
24
|
+
|
25
|
+
s.homepage = 'http://github.com/joeyates/package_manager'
|
26
|
+
s.author = 'Joe Yates'
|
27
|
+
s.email = 'joe.g.yates@gmail.com'
|
28
|
+
s.rubyforge_project = "nowarning"
|
29
|
+
|
30
|
+
|
31
|
+
s.files = ADMIN_FILES +
|
32
|
+
EXECUTABLES +
|
33
|
+
SOURCE_FILES
|
34
|
+
s.executables += EXECUTABLE_FILENAMES
|
35
|
+
s.require_paths = [ 'lib' ]
|
34
36
|
s.add_dependency( 'rake', '>= 0.8.7' )
|
35
37
|
|
36
|
-
s.has_rdoc
|
37
|
-
s.rdoc_options
|
38
|
-
s.extra_rdoc_files
|
38
|
+
s.has_rdoc = true
|
39
|
+
s.rdoc_options += RDOC_OPTS
|
40
|
+
s.extra_rdoc_files = RDOC_FILES
|
39
41
|
|
40
|
-
s.test_files
|
42
|
+
s.test_files = SPEC_FILES
|
41
43
|
end
|
42
44
|
|
43
|
-
Rake::GemPackageTask.new( spec )
|
44
|
-
end
|
45
|
+
Rake::GemPackageTask.new( spec ) {}
|
45
46
|
|
46
47
|
Spec::Rake::SpecTask.new do |t|
|
47
48
|
t.spec_files = FileList[ 'spec/**/*_spec.rb' ]
|
data/bin/pkg-provides
CHANGED
data/lib/package_manager.rb
CHANGED
data/lib/package_manager/base.rb
CHANGED
@@ -53,7 +53,7 @@ module PackageManager
|
|
53
53
|
|
54
54
|
# Returns true if the package installed successfully
|
55
55
|
def install_file( file )
|
56
|
-
raise
|
56
|
+
raise "The file '#{ file }' does not exist" if ! File.exist?( file )
|
57
57
|
run_command( install_file_command, file )
|
58
58
|
$?.exitstatus == 0
|
59
59
|
end
|
@@ -66,7 +66,7 @@ module PackageManager
|
|
66
66
|
|
67
67
|
# Returns the package name if found, or an empty string
|
68
68
|
def provides( file )
|
69
|
-
raise
|
69
|
+
raise "The file '#{ file }' does not exist" if ! File.exist?( file )
|
70
70
|
run_command( provides_command, file )
|
71
71
|
end
|
72
72
|
|
@@ -77,21 +77,22 @@ module PackageManager
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def self.guess_package_manager
|
80
|
-
|
80
|
+
os = operating_system
|
81
|
+
case os
|
81
82
|
when 'linux'
|
82
83
|
linux_package_manager
|
83
84
|
when 'darwin'
|
84
85
|
darwin_package_manager
|
85
86
|
else
|
86
|
-
raise
|
87
|
+
raise "Unhandled operating system: '#{ os }'"
|
87
88
|
end
|
88
89
|
end
|
89
90
|
|
90
91
|
def self.operating_system
|
91
92
|
platforms = Gem.platforms
|
92
|
-
raise 'Unexpected response from Gem.platforms'
|
93
|
-
raise 'Expected Array of 2 values'
|
94
|
-
raise 'Unexpected
|
93
|
+
raise 'Unexpected response from Gem.platforms' unless platforms.respond_to?( :size )
|
94
|
+
raise 'Expected Array of 2 values' unless platforms.size == 2
|
95
|
+
raise 'Unexpected operating system object returned by Gem.platforms' unless platforms[ 1 ].respond_to?( :os )
|
95
96
|
platforms[ 1 ].os
|
96
97
|
end
|
97
98
|
|
data/lib/package_manager/port.rb
CHANGED
@@ -17,6 +17,22 @@ module PackageManager
|
|
17
17
|
"port installed | sed -E -e 's/ +([^ ]+).*/\\1/' | grep "
|
18
18
|
end
|
19
19
|
|
20
|
+
def install_command
|
21
|
+
'port install'
|
22
|
+
end
|
23
|
+
|
24
|
+
def uninstall_command
|
25
|
+
'port uninstall'
|
26
|
+
end
|
27
|
+
|
28
|
+
def provides_command
|
29
|
+
'port provides'
|
30
|
+
end
|
31
|
+
|
32
|
+
def contents_command
|
33
|
+
'port contents'
|
34
|
+
end
|
35
|
+
|
20
36
|
end
|
21
37
|
|
22
38
|
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
require 'rubygems' if RUBY_VERSION < '1.9'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
SPEC_PATH = File.expand_path( File.dirname( __FILE__ ) )
|
5
|
+
ROOT_PATH = File.dirname( SPEC_PATH )
|
6
|
+
require File.join( ROOT_PATH, 'lib', 'package_manager' )
|
7
|
+
|
8
|
+
describe 'operating system sensing' do
|
9
|
+
|
10
|
+
it "should throw an error if Gem.platforms doesn't return an Array" do
|
11
|
+
Gem.stub!( :platforms ).and_return( nil )
|
12
|
+
lambda do
|
13
|
+
pkg = PackageManager::Base.load
|
14
|
+
end.should raise_error( StandardError, /Unexpected.*?response/ )
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should throw an error if Gem.platforms doesn't return two values" do
|
18
|
+
Gem.stub!( :platforms ).and_return( [] )
|
19
|
+
lambda do
|
20
|
+
pkg = PackageManager::Base.load
|
21
|
+
end.should raise_error( StandardError, /Expected.*?Array.*?2/ )
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should throw an error if Gem.platforms doesn't return two values" do
|
25
|
+
Gem.stub!( :platforms ).and_return( [] )
|
26
|
+
lambda do
|
27
|
+
pkg = PackageManager::Base.load
|
28
|
+
end.should raise_error( StandardError, /Expected.*?Array.*?2/ )
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should throw an error if Gem.platforms doesn't return an Object which yields an os" do
|
32
|
+
Gem.stub!( :platforms ).and_return( [ nil, nil ] )
|
33
|
+
lambda do
|
34
|
+
pkg = PackageManager::Base.load
|
35
|
+
end.should raise_error( StandardError, /Unexpected operating system object/ )
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should use the os value returned by Gem.platforms" do
|
39
|
+
operating_system = stub( 'thing', :os => 'my os' )
|
40
|
+
Gem.stub!( :platforms ).and_return( [ nil, operating_system ] )
|
41
|
+
lambda do
|
42
|
+
pkg = PackageManager::Base.load
|
43
|
+
end.should raise_error( StandardError, /my os/ )
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should throw an error on unknown operating systems' do
|
47
|
+
PackageManager::Base.stub!( :operating_system ).and_return( 'foo' )
|
48
|
+
lambda do
|
49
|
+
pkg = PackageManager::Base.load
|
50
|
+
end.should raise_error( StandardError, /Unhandled+.*?operating.*?system/ )
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
describe 'system interactions' do
|
56
|
+
|
57
|
+
it 'should use shell calls to determine what is installed' do
|
58
|
+
PackageManager::Base.stub!( :operating_system ).and_return( 'linux' )
|
59
|
+
`ls` # Force $? is 0
|
60
|
+
PackageManager::Base.should_receive( '`'.intern ).with( "which 'apt-get'" ).and_return( '/path/to/apt-get' )
|
61
|
+
pkg = PackageManager::Base.load
|
62
|
+
pkg.name.should == 'apt'
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
describe 'Linux package manager guessing' do
|
68
|
+
|
69
|
+
before( :each ) do
|
70
|
+
PackageManager::Base.stub!( :operating_system ).and_return( 'linux' )
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should always return a PackageManager::Base subclass' do
|
74
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'apt-get' ).and_return( true )
|
75
|
+
pkg = PackageManager::Base.load
|
76
|
+
pkg.should_not be_nil
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'with apt-get available, should return a PackageManager::Apt' do
|
80
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'apt-get' ).and_return( true )
|
81
|
+
pkg = PackageManager::Base.load
|
82
|
+
pkg.class.should == PackageManager::Apt
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'with yum available, should return a PackageManager::Yum' do
|
86
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'apt-get' ).and_return( false )
|
87
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'yum' ).and_return( true )
|
88
|
+
pkg = PackageManager::Base.load
|
89
|
+
pkg.class.should == PackageManager::Yum
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'with rpm available, should return a PackageManager::Rpm' do
|
93
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'apt-get' ).and_return( false )
|
94
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'yum' ).and_return( false )
|
95
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'rpm' ).and_return( true )
|
96
|
+
pkg = PackageManager::Base.load
|
97
|
+
pkg.class.should == PackageManager::Rpm
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'with no known package manager available, should raise an error' do
|
101
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'apt-get' ).and_return( false )
|
102
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'yum' ).and_return( false )
|
103
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'rpm' ).and_return( false )
|
104
|
+
lambda do
|
105
|
+
pkg = PackageManager::Base.load
|
106
|
+
end.should raise_error( StandardError, /Unknown+.*?package.*?manager/ )
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
describe 'OS X package manager guessing' do
|
112
|
+
|
113
|
+
before( :each ) do
|
114
|
+
PackageManager::Base.stub!( :operating_system ).and_return( 'darwin' )
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'should return a PackageManager::Base subclass' do
|
118
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'port' ).and_return( true )
|
119
|
+
pkg = PackageManager::Base.load
|
120
|
+
pkg.should_not be_nil
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'with port available, should return a PackageManager::Port' do
|
124
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'port' ).and_return( true )
|
125
|
+
pkg = PackageManager::Base.load
|
126
|
+
pkg.class.should == PackageManager::Port
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'with port available, should return a PackageManager::Fink' do
|
130
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'port' ).and_return( false )
|
131
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'apt-get' ).and_return( true )
|
132
|
+
pkg = PackageManager::Base.load
|
133
|
+
pkg.class.should == PackageManager::Fink
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'with no known package manager available, should raise an error' do
|
137
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'port' ).and_return( false )
|
138
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'apt-get' ).and_return( false )
|
139
|
+
lambda do
|
140
|
+
pkg = PackageManager::Base.load
|
141
|
+
end.should raise_error( StandardError, /Unknown+.*?package.*?manager/ )
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'rubygems' if RUBY_VERSION < '1.9'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
SPEC_PATH = File.expand_path( File.dirname( __FILE__ ) )
|
5
|
+
ROOT_PATH = File.dirname( SPEC_PATH )
|
6
|
+
require File.join( ROOT_PATH, 'lib', 'package_manager' )
|
7
|
+
|
8
|
+
describe 'script methods' do
|
9
|
+
|
10
|
+
before( :all ) do
|
11
|
+
PackageManager::Base.stub!( :operating_system ).and_return( 'linux' )
|
12
|
+
PackageManager::Base.stub!( :program_installed? ).with( 'apt-get' ).and_return( true )
|
13
|
+
@pkg = PackageManager::Base.load
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should run commands through a subprocess" do
|
17
|
+
@pkg.should_receive( '`'.intern ).and_return( "foo\n" )
|
18
|
+
@pkg.find_available( 'pkg' )
|
19
|
+
end
|
20
|
+
|
21
|
+
it "#find_available should return an Array of matching packages" do
|
22
|
+
@pkg.stub!( :run_command ).and_return( "pkg1\npkg2" )
|
23
|
+
@pkg.find_available( 'pkg' ).should be_a( Array )
|
24
|
+
end
|
25
|
+
|
26
|
+
it "#find_installed should return an Array of matching packages" do
|
27
|
+
@pkg.stub!( :run_command ).and_return( "pkg1\npkg2" )
|
28
|
+
@pkg.find_installed( 'pkg' ).should be_a( Array )
|
29
|
+
end
|
30
|
+
|
31
|
+
it "#list_contents should return an Array of files" do
|
32
|
+
@pkg.stub!( :run_command ).and_return( "/path/to/file1\n/path/to/file2" )
|
33
|
+
@pkg.list_contents( 'pkg' ).should be_a( Array )
|
34
|
+
end
|
35
|
+
|
36
|
+
it "#install should return true or false" do
|
37
|
+
`ls`
|
38
|
+
@pkg.stub!( :run_command )
|
39
|
+
@pkg.install( 'pkg' ).should be_true
|
40
|
+
end
|
41
|
+
|
42
|
+
it "#install_file should return true or false" do
|
43
|
+
`ls` # Force $?.exitstatus to be 0
|
44
|
+
@pkg.stub!( :run_command )
|
45
|
+
File.stub!( :exist? ).and_return( true )
|
46
|
+
@pkg.install_file( 'my_pkg' ).should be_true
|
47
|
+
end
|
48
|
+
|
49
|
+
it "#install_file should throw an error if the file does not exist" do
|
50
|
+
@pkg.stub!( :run_command )
|
51
|
+
File.stub!( :exist? ).and_return( false )
|
52
|
+
lambda do
|
53
|
+
@pkg.install_file( 'my_pkg' )
|
54
|
+
end.should raise_error( StandardError, /does not exist/ )
|
55
|
+
end
|
56
|
+
|
57
|
+
it "#uninstall should return true or false" do
|
58
|
+
`ls`
|
59
|
+
@pkg.stub!( :run_command )
|
60
|
+
@pkg.uninstall( 'pkg' ).should be_true
|
61
|
+
end
|
62
|
+
|
63
|
+
it "#provides should return a String" do
|
64
|
+
@pkg.stub!( :run_command ).and_return( 'my_pkg' )
|
65
|
+
File.stub!( :exist? ).and_return( true )
|
66
|
+
@pkg.provides( '/file/from/package' ).should == 'my_pkg'
|
67
|
+
end
|
68
|
+
|
69
|
+
it "#provides should throw an error if the file does not exist" do
|
70
|
+
@pkg.stub!( :run_command ).and_return( 'my_pkg' )
|
71
|
+
File.stub!( :exist? ).and_return( false )
|
72
|
+
lambda do
|
73
|
+
@pkg.provides( '/file/from/package' )
|
74
|
+
end.should raise_error( StandardError, /does not exist/ )
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'rubygems' if RUBY_VERSION < '1.9'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
SPEC_PATH = File.expand_path( File.dirname( __FILE__ ) )
|
5
|
+
ROOT_PATH = File.dirname( SPEC_PATH )
|
6
|
+
require File.join( ROOT_PATH, 'lib', 'package_manager' )
|
7
|
+
|
8
|
+
describe 'subclasses' do
|
9
|
+
|
10
|
+
it "PackageManager::Apt#name should return 'apt'" do
|
11
|
+
PackageManager::Apt.new.name.should == 'apt'
|
12
|
+
end
|
13
|
+
|
14
|
+
it "PackageManager::Dpkg#name should return 'dpkg'" do
|
15
|
+
PackageManager::Dpkg.new.name.should == 'dpkg'
|
16
|
+
end
|
17
|
+
|
18
|
+
it "PackageManager::Fink#name should return 'fink'" do
|
19
|
+
PackageManager::Fink.new.name.should == 'fink'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "PackageManager::Port#name should return 'port'" do
|
23
|
+
PackageManager::Port.new.name.should == 'port'
|
24
|
+
end
|
25
|
+
|
26
|
+
it "PackageManager::Rpm#name should return 'rpm'" do
|
27
|
+
PackageManager::Rpm.new.name.should == 'rpm'
|
28
|
+
end
|
29
|
+
|
30
|
+
it "PackageManager::Yum#name should return 'yum'" do
|
31
|
+
PackageManager::Yum.new.name.should == 'yum'
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems' if RUBY_VERSION < '1.9'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
SPEC_PATH = File.expand_path( File.dirname( __FILE__ ) )
|
5
|
+
ROOT_PATH = File.dirname( SPEC_PATH )
|
6
|
+
require File.join( ROOT_PATH, 'lib', 'package_manager' )
|
7
|
+
|
8
|
+
describe 'the package' do
|
9
|
+
|
10
|
+
it 'has a VERSION' do
|
11
|
+
PackageManager::VERSION::MAJOR.should_not be_nil
|
12
|
+
PackageManager::VERSION::MINOR.should_not be_nil
|
13
|
+
PackageManager::VERSION::TINY.should_not be_nil
|
14
|
+
PackageManager::VERSION::STRING.should_not be_nil
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: package_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joe Yates
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-09-
|
18
|
+
date: 2010-09-11 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -81,6 +81,10 @@ files:
|
|
81
81
|
- lib/package_manager/rpm.rb
|
82
82
|
- lib/package_manager/yum.rb
|
83
83
|
- lib/package_manager.rb
|
84
|
+
- spec/platform_spec.rb
|
85
|
+
- spec/script_methods_spec.rb
|
86
|
+
- spec/subclasses_spec.rb
|
87
|
+
- spec/version_spec.rb
|
84
88
|
has_rdoc: true
|
85
89
|
homepage: http://github.com/joeyates/package_manager
|
86
90
|
licenses: []
|
@@ -113,10 +117,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
117
|
version: "0"
|
114
118
|
requirements: []
|
115
119
|
|
116
|
-
rubyforge_project:
|
120
|
+
rubyforge_project: nowarning
|
117
121
|
rubygems_version: 1.3.7
|
118
122
|
signing_key:
|
119
123
|
specification_version: 3
|
120
124
|
summary: A package manager abstraction
|
121
|
-
test_files:
|
122
|
-
|
125
|
+
test_files:
|
126
|
+
- spec/platform_spec.rb
|
127
|
+
- spec/script_methods_spec.rb
|
128
|
+
- spec/subclasses_spec.rb
|
129
|
+
- spec/version_spec.rb
|