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.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/.github/CODEOWNERS +1 -0
  3. data/.github/workflows/ci.yaml +25 -0
  4. data/.gitignore +8 -0
  5. data/.rubocop.yml +1 -0
  6. data/.rubocop_todo.yml +111 -0
  7. data/.whitesource +3 -0
  8. data/CHANGELOG.md +66 -0
  9. data/Gemfile +9 -0
  10. data/MIT-LICENSE +23 -0
  11. data/README.md +374 -0
  12. data/Rakefile +58 -0
  13. data/_docker/Dockerfile.ubi8 +8 -0
  14. data/_docker/Dockerfile.ubi9 +8 -0
  15. data/lib/rpm/c/header.rb +36 -0
  16. data/lib/rpm/c/rpmcallback.rb +27 -0
  17. data/lib/rpm/c/rpmcli.rb +6 -0
  18. data/lib/rpm/c/rpmdb.rb +20 -0
  19. data/lib/rpm/c/rpmds.rb +43 -0
  20. data/lib/rpm/c/rpmfi.rb +31 -0
  21. data/lib/rpm/c/rpmio.rb +17 -0
  22. data/lib/rpm/c/rpmlib.rb +12 -0
  23. data/lib/rpm/c/rpmlog.rb +23 -0
  24. data/lib/rpm/c/rpmmacro.rb +33 -0
  25. data/lib/rpm/c/rpmprob.rb +53 -0
  26. data/lib/rpm/c/rpmps.rb +11 -0
  27. data/lib/rpm/c/rpmtag.rb +304 -0
  28. data/lib/rpm/c/rpmtd.rb +34 -0
  29. data/lib/rpm/c/rpmts.rb +69 -0
  30. data/lib/rpm/c/rpmtypes.rb +28 -0
  31. data/lib/rpm/c.rb +49 -0
  32. data/lib/rpm/compat.rb +40 -0
  33. data/lib/rpm/db.rb +117 -0
  34. data/lib/rpm/dependency.rb +120 -0
  35. data/lib/rpm/file.rb +134 -0
  36. data/lib/rpm/gem_version.rb +7 -0
  37. data/lib/rpm/match_iterator.rb +66 -0
  38. data/lib/rpm/package.rb +332 -0
  39. data/lib/rpm/problem.rb +65 -0
  40. data/lib/rpm/transaction.rb +268 -0
  41. data/lib/rpm/utils.rb +7 -0
  42. data/lib/rpm/version.rb +146 -0
  43. data/lib/rpm.rb +88 -0
  44. data/lib/rpm2.rb +1 -0
  45. data/rpm2.gemspec +29 -0
  46. data/test/data/a.spec +49 -0
  47. data/test/data/simple-1.0-0.i586.rpm +0 -0
  48. data/test/data/simple.spec +38 -0
  49. data/test/data/simple_with_deps-1.0-0.i586.rpm +0 -0
  50. data/test/data/simple_with_deps.spec +41 -0
  51. data/test/helper.rb +7 -0
  52. data/test/test_dependency.rb +28 -0
  53. data/test/test_file.rb +36 -0
  54. data/test/test_lib.rb +33 -0
  55. data/test/test_package.rb +76 -0
  56. data/test/test_problem.rb +18 -0
  57. data/test/test_rpm.rb +33 -0
  58. data/test/test_transaction.rb +156 -0
  59. data/test/test_version.rb +64 -0
  60. 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: []