rpm2 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.
- checksums.yaml +7 -0
- data/.github/CODEOWNERS +1 -0
- data/.github/workflows/ci.yaml +25 -0
- data/.gitignore +8 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +111 -0
- data/.whitesource +3 -0
- data/CHANGELOG.md +66 -0
- data/Gemfile +9 -0
- data/MIT-LICENSE +23 -0
- data/README.md +374 -0
- data/Rakefile +58 -0
- data/_docker/Dockerfile.ubi8 +8 -0
- data/_docker/Dockerfile.ubi9 +8 -0
- data/lib/rpm/c/header.rb +36 -0
- data/lib/rpm/c/rpmcallback.rb +27 -0
- data/lib/rpm/c/rpmcli.rb +6 -0
- data/lib/rpm/c/rpmdb.rb +20 -0
- data/lib/rpm/c/rpmds.rb +43 -0
- data/lib/rpm/c/rpmfi.rb +31 -0
- data/lib/rpm/c/rpmio.rb +17 -0
- data/lib/rpm/c/rpmlib.rb +12 -0
- data/lib/rpm/c/rpmlog.rb +23 -0
- data/lib/rpm/c/rpmmacro.rb +33 -0
- data/lib/rpm/c/rpmprob.rb +53 -0
- data/lib/rpm/c/rpmps.rb +11 -0
- data/lib/rpm/c/rpmtag.rb +304 -0
- data/lib/rpm/c/rpmtd.rb +34 -0
- data/lib/rpm/c/rpmts.rb +69 -0
- data/lib/rpm/c/rpmtypes.rb +28 -0
- data/lib/rpm/c.rb +49 -0
- data/lib/rpm/compat.rb +40 -0
- data/lib/rpm/db.rb +117 -0
- data/lib/rpm/dependency.rb +120 -0
- data/lib/rpm/file.rb +134 -0
- data/lib/rpm/gem_version.rb +7 -0
- data/lib/rpm/match_iterator.rb +66 -0
- data/lib/rpm/package.rb +332 -0
- data/lib/rpm/problem.rb +65 -0
- data/lib/rpm/transaction.rb +268 -0
- data/lib/rpm/utils.rb +7 -0
- data/lib/rpm/version.rb +146 -0
- data/lib/rpm.rb +88 -0
- data/lib/rpm2.rb +1 -0
- data/rpm2.gemspec +29 -0
- data/test/data/a.spec +49 -0
- data/test/data/simple-1.0-0.i586.rpm +0 -0
- data/test/data/simple.spec +38 -0
- data/test/data/simple_with_deps-1.0-0.i586.rpm +0 -0
- data/test/data/simple_with_deps.spec +41 -0
- data/test/helper.rb +7 -0
- data/test/test_dependency.rb +28 -0
- data/test/test_file.rb +36 -0
- data/test/test_lib.rb +33 -0
- data/test/test_package.rb +76 -0
- data/test/test_problem.rb +18 -0
- data/test/test_rpm.rb +33 -0
- data/test/test_transaction.rb +156 -0
- data/test/test_version.rb +64 -0
- metadata +133 -0
@@ -0,0 +1,156 @@
|
|
1
|
+
require_relative('helper')
|
2
|
+
require 'tmpdir'
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
class RPMTransactionTests < Minitest::Test
|
6
|
+
PACKAGE_FILENAME = 'simple-1.0-0.i586.rpm'.freeze
|
7
|
+
|
8
|
+
def test_flags
|
9
|
+
RPM.transaction do |t|
|
10
|
+
assert_equal RPM::TRANS_FLAG_NONE, t.flags
|
11
|
+
t.flags = RPM::TRANS_FLAG_TEST
|
12
|
+
assert_equal RPM::TRANS_FLAG_TEST, t.flags
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_iterator
|
17
|
+
RPM.transaction do |t|
|
18
|
+
it = t.init_iterator(nil, nil)
|
19
|
+
assert_kind_of RPM::MatchIterator, it
|
20
|
+
# assert it.count > 0
|
21
|
+
end
|
22
|
+
|
23
|
+
RPM.transaction do |t|
|
24
|
+
it = t.init_iterator(nil, nil)
|
25
|
+
it.regexp(:name, :glob, '*audio*')
|
26
|
+
it.each do |pkg|
|
27
|
+
assert pkg.name.include?('audio'), "'#{pkg.name}' contains 'audio'"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# FIXME: this is not working
|
33
|
+
def test_iterator_version
|
34
|
+
RPM.transaction do |t|
|
35
|
+
it = t.init_iterator(nil, nil)
|
36
|
+
it.version(RPM::Version.new('2.1'))
|
37
|
+
it.each do |sig|
|
38
|
+
# FIXME: check that this worked
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_basic_transaction_setters
|
44
|
+
Dir.mktmpdir do |dir|
|
45
|
+
RPM.transaction do |t|
|
46
|
+
assert_equal '/', t.root_dir
|
47
|
+
t.root_dir = dir
|
48
|
+
assert_equal dir + '/', t.root_dir
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
Dir.mktmpdir do |dir|
|
53
|
+
RPM.transaction(dir) do |t|
|
54
|
+
assert_equal dir + '/', t.root_dir
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_test_flag_install
|
60
|
+
pkg = RPM::Package.open(fixture(PACKAGE_FILENAME))
|
61
|
+
|
62
|
+
Dir.mktmpdir do |dir|
|
63
|
+
RPM.transaction(dir) do |t|
|
64
|
+
t.flags = RPM::TRANS_FLAG_TEST
|
65
|
+
t.install(pkg, fixture(PACKAGE_FILENAME))
|
66
|
+
t.commit
|
67
|
+
|
68
|
+
rpmdb_file = RPM::C.rpmvercmp(RPM::C.RPMVERSION, '4.16.0') >= 0 ? 'rpmdb.sqlite' : 'Packages'
|
69
|
+
|
70
|
+
assert File.exist?(File.join(dir, RPM['_dbpath'], rpmdb_file)), 'rpm db exists'
|
71
|
+
assert !File.exist?('/usr/share/simple/README'), "package #{pkg} was not installed"
|
72
|
+
ensure
|
73
|
+
# Force close so that RPM does not try to do it
|
74
|
+
# when the tmpdir is deleted
|
75
|
+
t.db.close
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_install_and_remove
|
81
|
+
pkg = RPM::Package.open(fixture(PACKAGE_FILENAME))
|
82
|
+
|
83
|
+
Dir.mktmpdir do |dir|
|
84
|
+
RPM.transaction(dir) do |t|
|
85
|
+
begin
|
86
|
+
t.install(pkg, fixture(PACKAGE_FILENAME))
|
87
|
+
t.commit
|
88
|
+
|
89
|
+
rpmdb_file = RPM::C.rpmvercmp(RPM::C.RPMVERSION, '4.16.0') >= 0 ? 'rpmdb.sqlite' : 'Packages'
|
90
|
+
|
91
|
+
assert File.exist?(File.join(dir, RPM['_dbpath'], rpmdb_file)), 'rpm db exists'
|
92
|
+
assert File.exist?(File.join(dir, '/usr/share/simple/README')), "package #{pkg} should be installed"
|
93
|
+
ensure
|
94
|
+
# Force close so that RPM does not try to do it
|
95
|
+
# when the tmpdir is deleted
|
96
|
+
t.db.close
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
skip("Commit hangs on package delete")
|
101
|
+
|
102
|
+
RPM.transaction(dir) do |t|
|
103
|
+
begin
|
104
|
+
assert_raises TypeError do
|
105
|
+
t.delete(Object.new)
|
106
|
+
end
|
107
|
+
|
108
|
+
t.delete(pkg)
|
109
|
+
t.order
|
110
|
+
t.clean
|
111
|
+
t.commit
|
112
|
+
|
113
|
+
assert !File.exist?(File.join(dir, '/usr/share/simple/README')), "package #{pkg} should not be installed"
|
114
|
+
ensure
|
115
|
+
# Force close so that RPM does not try to do it
|
116
|
+
# when the tmpdir is deleted
|
117
|
+
t.db.close
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_install_with_custom_callback
|
124
|
+
pkg = RPM::Package.open(fixture(PACKAGE_FILENAME))
|
125
|
+
|
126
|
+
Dir.mktmpdir do |dir|
|
127
|
+
RPM.transaction(dir) do |t|
|
128
|
+
begin
|
129
|
+
t.install(pkg, fixture(PACKAGE_FILENAME))
|
130
|
+
|
131
|
+
t.check do |problem|
|
132
|
+
STDERR.puts "Problem: #{problem}"
|
133
|
+
end
|
134
|
+
|
135
|
+
t.order
|
136
|
+
t.clean
|
137
|
+
|
138
|
+
t.commit do |data|
|
139
|
+
next case data.type
|
140
|
+
when :inst_open_file then
|
141
|
+
@f = File.open(data.key, 'r')
|
142
|
+
when :inst_close_file then @f.close
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
assert File.exist?(File.join(dir, '/usr/share/simple/README')),
|
147
|
+
"package #{pkg} should be installed"
|
148
|
+
ensure
|
149
|
+
# Force close so that RPM does not try to do it
|
150
|
+
# when the tmpdir is deleted
|
151
|
+
t.db.close
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
|
3
|
+
class RPMVersionTests < Minitest::Test
|
4
|
+
def setup
|
5
|
+
@a = RPM::Version.new('1.0.0-0.1m')
|
6
|
+
@b = RPM::Version.new('0.9.0-1m')
|
7
|
+
@c = RPM::Version.new('1.0.0-0.11m')
|
8
|
+
@d = RPM::Version.new('0.9.0-1m', 1)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_parse_evr
|
12
|
+
assert_equal [23, '1.0.3', '1suse'],
|
13
|
+
RPM::Version.parse_evr('23:1.0.3-1suse')
|
14
|
+
assert_equal [nil, '1.0', nil],
|
15
|
+
RPM::Version.parse_evr('1.0')
|
16
|
+
assert_equal [nil, '2.0', '3'],
|
17
|
+
RPM::Version.parse_evr('2.0-3')
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_version_compare
|
21
|
+
assert(@a > @b)
|
22
|
+
assert(@a < @c)
|
23
|
+
assert(@a < @d)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_version_newer?
|
27
|
+
assert(@a.newer?(@b))
|
28
|
+
assert(@c.newer?(@a))
|
29
|
+
assert(@d.newer?(@a))
|
30
|
+
assert(!@a.newer?(@a))
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_version_older?
|
34
|
+
assert(@b.older?(@a))
|
35
|
+
assert(@a.older?(@c))
|
36
|
+
assert(@a.older?(@d))
|
37
|
+
assert(!@a.older?(@a))
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_vre
|
41
|
+
assert_equal('0.9.0', @d.v)
|
42
|
+
assert_equal('1m', @d.r)
|
43
|
+
assert_equal(1, @d.e)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_to_s
|
47
|
+
assert_equal('0.9.0-1m', @b.to_s)
|
48
|
+
assert_equal('0.9.0-1m', @d.to_s)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_to_vre
|
52
|
+
assert_equal('0.9.0-1m', @b.to_vre)
|
53
|
+
assert_equal('1:0.9.0-1m', @d.to_vre)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_epoch_none_zero
|
57
|
+
v1 = RPM::Version.new('1-2')
|
58
|
+
v2 = RPM::Version.new('0:1-2')
|
59
|
+
assert_nil v1.e
|
60
|
+
assert_equal(0, v2.e)
|
61
|
+
assert(v1 == v2)
|
62
|
+
assert_equal(v1.hash, v2.hash)
|
63
|
+
end
|
64
|
+
end
|
metadata
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rpm2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Duncan Mac-Vicar P.
|
8
|
+
- ManageIQ Authors
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-02-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ffi
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Ruby bindings for rpm. Almost a drop-in replacement for ruby-rpm. Uses
|
42
|
+
FFI.
|
43
|
+
email:
|
44
|
+
- dmacvicar@suse.de
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- ".github/CODEOWNERS"
|
50
|
+
- ".github/workflows/ci.yaml"
|
51
|
+
- ".gitignore"
|
52
|
+
- ".rubocop.yml"
|
53
|
+
- ".rubocop_todo.yml"
|
54
|
+
- ".whitesource"
|
55
|
+
- CHANGELOG.md
|
56
|
+
- Gemfile
|
57
|
+
- MIT-LICENSE
|
58
|
+
- README.md
|
59
|
+
- Rakefile
|
60
|
+
- _docker/Dockerfile.ubi8
|
61
|
+
- _docker/Dockerfile.ubi9
|
62
|
+
- lib/rpm.rb
|
63
|
+
- lib/rpm/c.rb
|
64
|
+
- lib/rpm/c/header.rb
|
65
|
+
- lib/rpm/c/rpmcallback.rb
|
66
|
+
- lib/rpm/c/rpmcli.rb
|
67
|
+
- lib/rpm/c/rpmdb.rb
|
68
|
+
- lib/rpm/c/rpmds.rb
|
69
|
+
- lib/rpm/c/rpmfi.rb
|
70
|
+
- lib/rpm/c/rpmio.rb
|
71
|
+
- lib/rpm/c/rpmlib.rb
|
72
|
+
- lib/rpm/c/rpmlog.rb
|
73
|
+
- lib/rpm/c/rpmmacro.rb
|
74
|
+
- lib/rpm/c/rpmprob.rb
|
75
|
+
- lib/rpm/c/rpmps.rb
|
76
|
+
- lib/rpm/c/rpmtag.rb
|
77
|
+
- lib/rpm/c/rpmtd.rb
|
78
|
+
- lib/rpm/c/rpmts.rb
|
79
|
+
- lib/rpm/c/rpmtypes.rb
|
80
|
+
- lib/rpm/compat.rb
|
81
|
+
- lib/rpm/db.rb
|
82
|
+
- lib/rpm/dependency.rb
|
83
|
+
- lib/rpm/file.rb
|
84
|
+
- lib/rpm/gem_version.rb
|
85
|
+
- lib/rpm/match_iterator.rb
|
86
|
+
- lib/rpm/package.rb
|
87
|
+
- lib/rpm/problem.rb
|
88
|
+
- lib/rpm/transaction.rb
|
89
|
+
- lib/rpm/utils.rb
|
90
|
+
- lib/rpm/version.rb
|
91
|
+
- lib/rpm2.rb
|
92
|
+
- rpm2.gemspec
|
93
|
+
- test/data/a.spec
|
94
|
+
- test/data/simple-1.0-0.i586.rpm
|
95
|
+
- test/data/simple.spec
|
96
|
+
- test/data/simple_with_deps-1.0-0.i586.rpm
|
97
|
+
- test/data/simple_with_deps.spec
|
98
|
+
- test/helper.rb
|
99
|
+
- test/test_dependency.rb
|
100
|
+
- test/test_file.rb
|
101
|
+
- test/test_lib.rb
|
102
|
+
- test/test_package.rb
|
103
|
+
- test/test_problem.rb
|
104
|
+
- test/test_rpm.rb
|
105
|
+
- test/test_transaction.rb
|
106
|
+
- test/test_version.rb
|
107
|
+
homepage: https://github.com/ManageIQ/ruby-rpm-ffi2
|
108
|
+
licenses:
|
109
|
+
- MIT
|
110
|
+
metadata:
|
111
|
+
allowed_push_host: https://rubygems.org
|
112
|
+
rubygems_mfa_required: 'true'
|
113
|
+
homepage_uri: https://github.com/ManageIQ/ruby-rpm-ffi2
|
114
|
+
source_code_uri: https://github.com/ManageIQ/ruby-rpm-ffi2
|
115
|
+
changelog_uri: https://github.com/ManageIQ/ruby-rpm-ffi2/blob/master/CHANGELOG.md
|
116
|
+
rdoc_options: []
|
117
|
+
require_paths:
|
118
|
+
- lib
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
requirements: []
|
130
|
+
rubygems_version: 3.6.3
|
131
|
+
specification_version: 4
|
132
|
+
summary: Ruby bindings for rpm (package manager)
|
133
|
+
test_files: []
|