rpm2 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []