apt-pkg 0.5.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.
@@ -0,0 +1,5 @@
1
+ #include "apt-pkg.h"
2
+ #include <apt-pkg/aptconfiguration.h>
3
+ #include <apt-pkg/configuration.h>
4
+
5
+ void init_apt_pkg_configuration();
@@ -0,0 +1,5 @@
1
+ require 'mkmf'
2
+ have_library('stdc++')
3
+ have_library('apt-pkg')
4
+ dir_config('apt_pkg')
5
+ create_makefile('apt_pkg')
@@ -0,0 +1,406 @@
1
+ #include "pkgcache.h"
2
+
3
+ static VALUE e_mDebianAptPkgInitError, rb_cPackage, rb_cVersion;
4
+
5
+ /*
6
+ * private
7
+ */
8
+ bool
9
+ config_system_initialized()
10
+ {
11
+ string const arch = _config->Find("APT::Architecture");
12
+ if (arch.empty()) {
13
+ return false;
14
+ }
15
+ return true;
16
+ }
17
+
18
+ /*
19
+ * call-seq: gen_caches() -> bool
20
+ *
21
+ * Call the main cache generator.
22
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
23
+ * configured.
24
+ *
25
+ * Debian::AptPkg::PkgCache.gen_caches # => false
26
+ *
27
+ **/
28
+ static VALUE
29
+ gen_caches(VALUE self)
30
+ {
31
+ if (!config_system_initialized()) {
32
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
33
+ }
34
+ pkgCacheFile CacheFile;
35
+ int res = CacheFile.BuildCaches(NULL, true);
36
+ return INT2BOOL(res);
37
+ }
38
+
39
+ /*
40
+ * call-seq: update() -> bool
41
+ *
42
+ * Update the index files used by the cache.
43
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
44
+ * configured.
45
+ *
46
+ * Debian::AptPkg::PkgCache.update # => false
47
+ *
48
+ **/
49
+ static VALUE
50
+ update(VALUE self)
51
+ {
52
+ if (!config_system_initialized()) {
53
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
54
+ }
55
+ pkgCacheFile CacheFile;
56
+ // Get the source list
57
+ if (CacheFile.BuildSourceList() == false) {
58
+ return Qnil;
59
+ }
60
+ pkgAcquireStatus *Stat(NULL);
61
+ pkgSourceList *List = CacheFile.GetSourceList();
62
+ int res = ListUpdate(*Stat, *List);
63
+ return INT2BOOL(res);
64
+ }
65
+
66
+ /*
67
+ * call-seq: is_multi_arch() -> bool
68
+ *
69
+ * An attribute determining whether the cache supports multi-arch.
70
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
71
+ * configured.
72
+ *
73
+ * Debian::AptPkg::PkgCache.is_multi_arch # => false
74
+ *
75
+ **/
76
+ static VALUE
77
+ is_multi_arch(VALUE self)
78
+ {
79
+ if (!config_system_initialized()) {
80
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
81
+ }
82
+ pkgCacheFile CacheFile;
83
+ pkgCache *Cache = CacheFile.GetPkgCache();
84
+ if (Cache == NULL) {
85
+ return Qnil;
86
+ }
87
+ int res = Cache->MultiArchCache();
88
+ return INT2BOOL(res);
89
+ }
90
+
91
+ /*
92
+ * call-seq: packages() -> array, nil
93
+ *
94
+ * A list of Debian::AptPkg::Package objects stored in the cache
95
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
96
+ * configured.
97
+ *
98
+ * Debian::AptPkg::PkgCache.packages
99
+ *
100
+ **/
101
+ static VALUE
102
+ packages(int argc, VALUE *argv, VALUE self)
103
+ {
104
+ if (!config_system_initialized()) {
105
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
106
+ }
107
+ VALUE result = rb_ary_new();
108
+ pkgCacheFile CacheFile;
109
+ if (CacheFile.GetPkgCache() == 0) {
110
+ return Qnil;
111
+ }
112
+ for (pkgCache::PkgIterator Pkg = CacheFile.GetPkgCache()->PkgBegin(); not Pkg.end(); ++Pkg) {
113
+ VALUE current_version;
114
+ if (Pkg->CurrentVer == 0) {
115
+ current_version = Qnil;
116
+ } else {
117
+ current_version = rb_struct_new(rb_cVersion,
118
+ rb_str_new2(Pkg.CurrentVer().ParentPkg().Name()),
119
+ rb_str_new2(Pkg.CurrentVer().VerStr()),
120
+ rb_str_new2(Pkg.CurrentVer().Section()),
121
+ rb_str_new2(Pkg.CurrentVer().Arch()),
122
+ INT2FIX(Pkg.CurrentVer()->Size),
123
+ INT2FIX(Pkg.CurrentVer()->InstalledSize),
124
+ INT2FIX(Pkg.CurrentVer()->Hash),
125
+ INT2FIX(Pkg.CurrentVer()->ID),
126
+ INT2FIX(Pkg.CurrentVer()->Priority)
127
+ );
128
+ }
129
+ VALUE rb_cPackage_args[7];
130
+ rb_cPackage_args[0] = INT2FIX(Pkg->ID);
131
+ rb_cPackage_args[1] = rb_str_new2(Pkg.Name());
132
+ rb_cPackage_args[2] = rb_str_new2(Pkg.FullName().c_str());
133
+ rb_cPackage_args[3] = rb_str_new2(Pkg.Arch());
134
+ rb_cPackage_args[4] = INT2BOOL((Pkg->Flags & pkgCache::Flag::Essential) != 0);
135
+ rb_cPackage_args[5] = INT2BOOL((Pkg->Flags & pkgCache::Flag::Important) != 0);
136
+ rb_cPackage_args[6] = current_version;
137
+ rb_ary_push(result, rb_class_new_instance(7,
138
+ rb_cPackage_args,
139
+ rb_cPackage
140
+ ));
141
+ }
142
+ return result;
143
+ }
144
+
145
+ /*
146
+ * call-seq: pkg_names() -> array, nil
147
+ *
148
+ * Deprecated and will removed in 0.6.0
149
+ * List the names of all packages in the system.
150
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
151
+ * configured.
152
+ *
153
+ * Debian::AptPkg::PkgCache.pkg_names('gcolor2') # => ["gcolor2"]
154
+ *
155
+ **/
156
+ static VALUE
157
+ pkg_names(int argc, VALUE *argv, VALUE self)
158
+ {
159
+ rb_warn("Debian::AptPkg::PkgCache.pkg_names is deprecated; " \
160
+ "use Debian::AptPkg::PkgCache.packages instead");
161
+ if (!config_system_initialized()) {
162
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
163
+ }
164
+ if (argc > 1 || argc == 0) {
165
+ rb_raise(rb_eArgError, "You must give at least one search argument");
166
+ }
167
+ VALUE name;
168
+ rb_scan_args(argc, argv, "01", &name);
169
+ if (NIL_P(name) || RSTRING_LEN(name) < 1) {
170
+ rb_raise(rb_eArgError, "You must give at least one search pattern");
171
+ }
172
+ VALUE result = rb_ary_new();
173
+
174
+ pkgCacheFile CacheFile;
175
+ if (CacheFile.GetPkgCache() == 0) {
176
+ return Qnil;
177
+ }
178
+ pkgCache::GrpIterator I = CacheFile.GetPkgCache()->GrpBegin();
179
+
180
+ const char *pkgname = StringValuePtr(name);
181
+ for (; I.end() != true; ++I) {
182
+ if (strncmp(I.Name(), pkgname, strlen(pkgname)) == 0) {
183
+ rb_ary_push(result, rb_str_new2(I.Name()));
184
+ }
185
+ }
186
+ return result;
187
+ }
188
+
189
+ /*
190
+ * call-seq: package_count() -> int, nil
191
+ *
192
+ * The total number of packages available in the cache.
193
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
194
+ * configured.
195
+ *
196
+ * Debian::AptPkg::PkgCache.package_count # => 69511
197
+ *
198
+ **/
199
+ static VALUE
200
+ package_count(VALUE self)
201
+ {
202
+ if (!config_system_initialized()) {
203
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
204
+ }
205
+ pkgCacheFile CacheFile;
206
+ pkgCache *Cache = CacheFile.GetPkgCache();
207
+ if (Cache == NULL) {
208
+ return Qnil;
209
+ }
210
+ return INT2FIX(Cache->HeaderP->PackageCount);
211
+ }
212
+
213
+ /*
214
+ * call-seq: version_count() -> int, nil
215
+ *
216
+ * The total number of package versions available in the cache.
217
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
218
+ * configured.
219
+ *
220
+ * Debian::AptPkg::PkgCache.version_count # => 84630
221
+ *
222
+ **/
223
+ static VALUE
224
+ version_count(VALUE self)
225
+ {
226
+ if (!config_system_initialized()) {
227
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
228
+ }
229
+ pkgCacheFile CacheFile;
230
+ pkgCache *Cache = CacheFile.GetPkgCache();
231
+ if (Cache == NULL) {
232
+ return Qnil;
233
+ }
234
+ return INT2FIX(Cache->HeaderP->VersionCount);
235
+ }
236
+
237
+ /*
238
+ * call-seq: depends_count() -> int, nil
239
+ *
240
+ * The total number of dependencies stored in the cache.
241
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
242
+ * configured.
243
+ *
244
+ * Debian::AptPkg::PkgCache.depends_count # => 551983
245
+ *
246
+ **/
247
+ static VALUE
248
+ depends_count(VALUE self)
249
+ {
250
+ if (!config_system_initialized()) {
251
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
252
+ }
253
+ pkgCacheFile CacheFile;
254
+ pkgCache *Cache = CacheFile.GetPkgCache();
255
+ if (Cache == NULL) {
256
+ return Qnil;
257
+ }
258
+ return INT2FIX(Cache->HeaderP->DependsCount);
259
+ }
260
+
261
+ /*
262
+ * call-seq: package_file_count() -> int, nil
263
+ *
264
+ * The total number of packages files available.
265
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
266
+ * configured.
267
+ *
268
+ * Debian::AptPkg::PkgCache.package_file_count # => 17
269
+ *
270
+ **/
271
+ static VALUE
272
+ package_file_count(VALUE self)
273
+ {
274
+ if (!config_system_initialized()) {
275
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
276
+ }
277
+ pkgCacheFile CacheFile;
278
+ pkgCache *Cache = CacheFile.GetPkgCache();
279
+ if (Cache == NULL) {
280
+ return Qnil;
281
+ }
282
+ return INT2FIX(Cache->HeaderP->PackageFileCount);
283
+ }
284
+
285
+ /*
286
+ * call-seq: ver_file_count() -> int, nil
287
+ *
288
+ * The total number of version and package file relations stored in the cache.
289
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
290
+ * configured.
291
+ *
292
+ * Debian::AptPkg::PkgCache.ver_file_count # => 11274
293
+ *
294
+ **/
295
+ static VALUE
296
+ ver_file_count(VALUE self)
297
+ {
298
+ if (!config_system_initialized()) {
299
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
300
+ }
301
+ pkgCacheFile CacheFile;
302
+ pkgCache *Cache = CacheFile.GetPkgCache();
303
+ if (Cache == NULL) {
304
+ return Qnil;
305
+ }
306
+ return INT2FIX(Cache->HeaderP->VerFileCount);
307
+ }
308
+
309
+ /*
310
+ * call-seq: provides_count() -> int, nil
311
+ *
312
+ * The number of provided packages.
313
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
314
+ * configured.
315
+ *
316
+ * Debian::AptPkg::PkgCache.provides_count # => 69511
317
+ *
318
+ **/
319
+ static VALUE
320
+ provides_count(VALUE self)
321
+ {
322
+ if (!config_system_initialized()) {
323
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
324
+ }
325
+ pkgCacheFile CacheFile;
326
+ pkgCache *Cache = CacheFile.GetPkgCache();
327
+ if (Cache == NULL) {
328
+ return Qnil;
329
+ }
330
+ return INT2FIX(Cache->HeaderP->ProvidesCount);
331
+ }
332
+
333
+ /*
334
+ * call-seq: group_count() -> int, nil
335
+ *
336
+ * The number of groups in the cache.
337
+ * Raise `Debian::AptPkg::InitError` when config, system, cache is not
338
+ * configured.
339
+ *
340
+ * Debian::AptPkg::PkgCache.group_count # => 16730
341
+ *
342
+ **/
343
+ static VALUE
344
+ group_count(VALUE self)
345
+ {
346
+ if (!config_system_initialized()) {
347
+ rb_raise(e_mDebianAptPkgInitError, "System not initialized");
348
+ }
349
+ pkgCacheFile CacheFile;
350
+ pkgCache *Cache = CacheFile.GetPkgCache();
351
+ if (Cache == NULL) {
352
+ return Qnil;
353
+ }
354
+ return INT2FIX(Cache->HeaderP->GroupCount);
355
+ }
356
+
357
+ void
358
+ init_apt_pkg_pkgcache()
359
+ {
360
+ VALUE rb_mDebian = rb_define_module("Debian");
361
+ VALUE rb_mDebianAptPkg = rb_define_module_under(rb_mDebian, "AptPkg");
362
+ VALUE rb_mDebianAptPkgCache = rb_define_module_under(rb_mDebianAptPkg,
363
+ "PkgCache");
364
+ e_mDebianAptPkgInitError = rb_define_class_under(rb_mDebianAptPkg,
365
+ "InitError",
366
+ rb_eRuntimeError);
367
+ rb_cPackage = rb_const_get_at(rb_mDebianAptPkg, rb_intern("Package"));
368
+ rb_cVersion = rb_struct_define_under(rb_mDebianAptPkg, "Version",
369
+ "parent_package_name",
370
+ "version_string",
371
+ "section",
372
+ "arch",
373
+ "size",
374
+ "installed_size",
375
+ "hash",
376
+ "id",
377
+ "priority",
378
+ NULL);
379
+
380
+ rb_define_singleton_method(rb_mDebianAptPkgCache, "gen_caches",
381
+ RUBY_METHOD_FUNC(gen_caches), 0);
382
+ rb_define_singleton_method(rb_mDebianAptPkgCache, "update",
383
+ RUBY_METHOD_FUNC(update), 0);
384
+ rb_define_singleton_method(rb_mDebianAptPkgCache, "is_multi_arch",
385
+ RUBY_METHOD_FUNC(is_multi_arch), 0);
386
+ rb_define_singleton_method(rb_mDebianAptPkgCache, "packages",
387
+ RUBY_METHOD_FUNC(packages), 0);
388
+ rb_define_singleton_method(rb_mDebianAptPkgCache, "pkg_names",
389
+ RUBY_METHOD_FUNC(pkg_names), -1);
390
+
391
+ rb_define_singleton_method(rb_mDebianAptPkgCache, "package_count",
392
+ RUBY_METHOD_FUNC(package_count), 0);
393
+ rb_define_singleton_method(rb_mDebianAptPkgCache, "version_count",
394
+ RUBY_METHOD_FUNC(version_count), 0);
395
+ rb_define_singleton_method(rb_mDebianAptPkgCache, "depends_count",
396
+ RUBY_METHOD_FUNC(depends_count), 0);
397
+ rb_define_singleton_method(rb_mDebianAptPkgCache,
398
+ "package_file_count",
399
+ RUBY_METHOD_FUNC(package_file_count), 0);
400
+ rb_define_singleton_method(rb_mDebianAptPkgCache, "ver_file_count",
401
+ RUBY_METHOD_FUNC(ver_file_count), 0);
402
+ rb_define_singleton_method(rb_mDebianAptPkgCache, "provides_count",
403
+ RUBY_METHOD_FUNC(provides_count), 0);
404
+ rb_define_singleton_method(rb_mDebianAptPkgCache, "group_count",
405
+ RUBY_METHOD_FUNC(group_count), 0);
406
+ }
@@ -0,0 +1,8 @@
1
+ #include "apt-pkg.h"
2
+ #include <apt-pkg/cachefile.h>
3
+ #include <apt-pkg/cacheiterators.h>
4
+ #include <apt-pkg/depcache.h>
5
+ #include <apt-pkg/pkgcache.h>
6
+ #include <apt-pkg/update.h>
7
+
8
+ void init_apt_pkg_pkgcache();
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+ require 'debian/apt_pkg/package'
3
+ require 'apt_pkg'
4
+ require 'debian/apt_pkg/gem_version'
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+ # Debian::AptPkg const VERSION file
3
+ module Debian
4
+ # AptPkg base module
5
+ module AptPkg
6
+ # Gem version
7
+ VERSION = '0.5.0'.freeze
8
+ end
9
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+ # Debian::AptPkg::Package file
3
+ module Debian
4
+ # AptPkg base module
5
+ module AptPkg
6
+ # Debian::AptPkg::Package class
7
+ # Representation of a package in a cache
8
+ class Package
9
+ attr_accessor :id, :name, :full_name, :arch, :essential, :important,
10
+ :current_version
11
+
12
+ # Initialize the Package class
13
+ # @example
14
+ # new(id, name, full_name, arch, essential, important, current_version)
15
+ # @param [Integer] The numeric ID of the package
16
+ # @param [String] The name of the package
17
+ # @param [String] Get the full name of the package, including the
18
+ # architecture
19
+ # @param [String] The architecture of the package
20
+ # @param [Boolean] Boolean value determining whether the package is
21
+ # essential
22
+ # @param [Boolean] Boolean value determining whether the package has the
23
+ # 'important' flag set
24
+ # ('Important: yes' in the Packages file)
25
+ # @param [Version,NilClass] The version of the package currently installed
26
+ # or `nil`
27
+ # @return [Package] Package instance
28
+ def initialize(id, name, full_name, arch, essential, important, current_version)
29
+ @id = id
30
+ @name = name
31
+ @full_name = full_name
32
+ @arch = arch
33
+ @essential = essential
34
+ @important = important
35
+ @current_version = current_version
36
+ end
37
+
38
+ # Return `true` if the package is installed
39
+ # @return [Boolean]
40
+ def is_installed
41
+ return false unless current_version
42
+
43
+ true
44
+ end
45
+ end
46
+ end
47
+ end