apt-pkg 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 87712bb513a4494dcf32cccd94507c3f06384fd1
4
- data.tar.gz: 1abb0ebc3f50bdac8f80a4857e8e59e9195a5fd4
3
+ metadata.gz: a15a6f04cd0bacddacf0cfed8521bc4001bc5a31
4
+ data.tar.gz: 5f95076ea9c816f6e604904e1cf1602b64eff022
5
5
  SHA512:
6
- metadata.gz: 381f94c894465eb5cb7046095d9e652ae64b098920a7f7156f91c8463fe1a491ff794671e2cc7947e32d6d92945dcb9326edec4ce8d3b6826488e32bf3ae64d4
7
- data.tar.gz: fc8c34e7891e54259fac2770ceb43a737ae3d24f7171807da8e10504b782f3a084b59f8bbfe85e3f97e08894ad76e26c79512cdeb6f9f3a36bc4d5245690887c
6
+ metadata.gz: 76f75b505d7e04f39ca5f4717c93b2a1bbfe92be3f0340f196a3e8e7492673a32174cf54b80d83b9c2f0f9f3ff9160d7da2863cf513239f2f3cd39c1245c9b53
7
+ data.tar.gz: 3add16347b3a0bc3ca2cfbf155f50d7e866aa1572689965ab46641fb337126267871afd8b5d24037b27b52f59b8d1e165f90017ea9675acc154ce308a877f70a
data/History.md ADDED
@@ -0,0 +1,6 @@
1
+
2
+ 0.3.0 / 2015-12-19
3
+ ==================
4
+
5
+ * Simple search with `Debian::AptPkg::PkgCache.pkg_names("vim")`
6
+
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright (c) 2014 Laurent Arnoud <laurent@spkdev.net>
3
+ Copyright (c) 2014-2015 Laurent Arnoud <laurent@spkdev.net>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,9 +1,21 @@
1
1
  # Ruby interface to apt-pkg
2
2
 
3
+ Goal of this project is to have a proper Ruby binding to APT like in
4
+ [Python](https://apt.alioth.debian.org/python-apt-doc/library/apt_pkg.html).
5
+
6
+ Currently install, remove packages commands are **not** implemented.
7
+
8
+ Simple search is implemented with:
9
+
10
+ ~~~ ruby
11
+ require 'apt_pkg'
12
+ Debian::AptPkg::PkgCache.pkg_names("vim")
13
+ ~~~
14
+
3
15
  ## INSTALL
4
16
 
5
17
  ~~~ console
6
- aptitude install libapt-pkg-dev ruby2.0-dev
18
+ aptitude install build-essential ruby-dev libapt-pkg-dev (~> 1.0)
7
19
  gem install apt-pkg
8
20
  ~~~
9
21
 
@@ -11,18 +23,10 @@ gem install apt-pkg
11
23
 
12
24
  ~~~ ruby
13
25
  require 'apt_pkg'
14
-
15
- Debian::AptPkg.check_dep('1', '<', '2') # => true
16
- Debian::AptPkg.check_dep('1', Debian::AptPkg::NOT_EQUALS, '2') # => true
17
- Debian::AptPkg.check_domain_list("alioth.debian.org", "debian.net,debian.org") # => true
18
- Debian::AptPkg.cmp_version('1.1', '1.0') # => 1
19
- Debian::AptPkg.size_to_str(10000) # => '10.0 k'
20
- Debian::AptPkg.string_to_bool('yes') # => 1
21
- Debian::AptPkg.time_to_str(3601) # => '1h 0min 1s'
22
- Debian::AptPkg.upstream_version('3.4.15-1+b1') # => '3.4.15'
23
- Debian::AptPkg.uri_to_filename('http://debian.org/index.html') # => 'debian.org_index.html'
24
26
  ~~~
25
27
 
28
+ See https://spk.github.io/ruby-apt-pkg/
29
+
26
30
  ## BUILD
27
31
 
28
32
  ~~~ console
@@ -37,12 +41,13 @@ bundle exec rake compile
37
41
  bundle exec rake test
38
42
  ~~~
39
43
 
40
- ## REFERENCES
41
-
42
- * http://apt.alioth.debian.org/python-apt-doc/library/apt_pkg.html
43
-
44
44
  ## LICENSE
45
45
 
46
46
  The MIT License
47
47
 
48
- Copyright (c) 2014 Laurent Arnoud <laurent@spkdev.net>
48
+ Copyright (c) 2014-2015 Laurent Arnoud <laurent@spkdev.net>
49
+
50
+ ---
51
+ [![Gem Version](https://badge.fury.io/rb/apt-pkg.svg)](https://rubygems.org/gems/apt-pkg)
52
+ [![Build Status](https://secure.travis-ci.org/spk/ruby-apt-pkg.svg?branch=master)](https://travis-ci.org/spk/ruby-apt-pkg)
53
+ [![License](https://img.shields.io/github/license/spk/ruby-apt-pkg.svg)](http://opensource.org/licenses/MIT)
@@ -1,27 +1,6 @@
1
- #include <ruby.h>
2
- #include <apt-pkg/deblistparser.h>
3
- #include <apt-pkg/debversion.h>
4
- #include <apt-pkg/pkgcache.h>
5
- #include <apt-pkg/strutl.h>
6
- #include <apt-pkg/init.h>
7
-
8
- using namespace std;
9
-
10
- /* from '<ruby/dl.h>' */
11
- #define INT2BOOL(x) ((x) ? Qtrue : Qfalse)
12
-
13
- /* function prototypes */
14
- extern "C" void Init_apt_pkg();
15
- /* String functions */
16
- static VALUE uri_to_filename(VALUE self, VALUE uri);
17
- static VALUE time_to_str(VALUE self, VALUE secondes);
18
- static VALUE size_to_str(VALUE self, VALUE size);
19
- static VALUE string_to_bool(VALUE self, VALUE text);
20
- static VALUE check_domain_list(VALUE self, VALUE host, VALUE list);
21
- /* Versioning */
22
- static VALUE cmp_version(VALUE self, VALUE pkg_version_a, VALUE pkg_version_b);
23
- static VALUE check_dep(VALUE self, VALUE pkg_version_a, VALUE cmp_type, VALUE pkg_version_b);
24
- static VALUE upstream_version(VALUE self, VALUE ver);
1
+ #include "apt-pkg.h"
2
+ #include "configuration.h"
3
+ #include "pkgcache.h"
25
4
 
26
5
  /*
27
6
  * call-seq: cmp_version(pkg_version_a, pkg_version_b) -> int
@@ -38,8 +17,9 @@ static VALUE upstream_version(VALUE self, VALUE ver);
38
17
  **/
39
18
  static
40
19
  VALUE cmp_version(VALUE self, VALUE pkg_version_a, VALUE pkg_version_b) {
41
- int res = debVS.CmpVersion(StringValuePtr(pkg_version_a), StringValuePtr(pkg_version_b));
42
- return INT2FIX(res);
20
+ int res = debVS.CmpVersion(StringValuePtr(pkg_version_a),
21
+ StringValuePtr(pkg_version_b));
22
+ return INT2FIX(res);
43
23
  }
44
24
 
45
25
  /*
@@ -59,21 +39,22 @@ VALUE cmp_version(VALUE self, VALUE pkg_version_a, VALUE pkg_version_b) {
59
39
  **/
60
40
  static
61
41
  VALUE check_dep(VALUE self, VALUE pkg_version_a, VALUE cmp_type, VALUE pkg_version_b) {
62
- unsigned int op = 0;
63
- if (TYPE(cmp_type) == T_FIXNUM) {
64
- op = NUM2INT(cmp_type);
65
- } else {
66
- const char *op_str = StringValuePtr(cmp_type);
67
- if (strcmp(op_str, ">") == 0) op_str = ">>";
68
- if (strcmp(op_str, "<") == 0) op_str = "<<";
69
- if (*debListParser::ConvertRelation(op_str, op) != 0)
70
- {
71
- rb_raise(rb_eArgError, "Bad comparison operation");
72
- return 0;
73
- }
74
- }
75
- int res = debVS.CheckDep(StringValuePtr(pkg_version_a), op, StringValuePtr(pkg_version_b));
76
- return INT2BOOL(res);
42
+ unsigned int op = 0;
43
+ if (TYPE(cmp_type) == T_FIXNUM) {
44
+ op = NUM2INT(cmp_type);
45
+ } else {
46
+ const char *op_str = StringValuePtr(cmp_type);
47
+ if (strcmp(op_str, ">") == 0) op_str = ">>";
48
+ if (strcmp(op_str, "<") == 0) op_str = "<<";
49
+ if (*debListParser::ConvertRelation(op_str, op) != 0)
50
+ {
51
+ rb_raise(rb_eArgError, "Bad comparison operation");
52
+ return 0;
53
+ }
54
+ }
55
+ int res = debVS.CheckDep(StringValuePtr(pkg_version_a), op,
56
+ StringValuePtr(pkg_version_b));
57
+ return INT2BOOL(res);
77
58
  }
78
59
 
79
60
  /*
@@ -86,7 +67,7 @@ VALUE check_dep(VALUE self, VALUE pkg_version_a, VALUE cmp_type, VALUE pkg_versi
86
67
  **/
87
68
  static
88
69
  VALUE uri_to_filename(VALUE self, VALUE uri) {
89
- return rb_str_new2(URItoFileName(StringValuePtr(uri)).c_str());
70
+ return rb_str_new2(URItoFileName(StringValuePtr(uri)).c_str());
90
71
  }
91
72
 
92
73
  /*
@@ -99,7 +80,7 @@ VALUE uri_to_filename(VALUE self, VALUE uri) {
99
80
  **/
100
81
  static
101
82
  VALUE upstream_version(VALUE self, VALUE ver) {
102
- return rb_str_new2(debVS.UpstreamVersion(StringValuePtr(ver)).c_str());
83
+ return rb_str_new2(debVS.UpstreamVersion(StringValuePtr(ver)).c_str());
103
84
  }
104
85
 
105
86
  /*
@@ -112,7 +93,7 @@ VALUE upstream_version(VALUE self, VALUE ver) {
112
93
  **/
113
94
  static
114
95
  VALUE time_to_str(VALUE self, VALUE secondes) {
115
- return rb_str_new2(TimeToStr(NUM2INT(secondes)).c_str());
96
+ return rb_str_new2(TimeToStr(NUM2INT(secondes)).c_str());
116
97
  }
117
98
 
118
99
  /*
@@ -125,7 +106,7 @@ VALUE time_to_str(VALUE self, VALUE secondes) {
125
106
  **/
126
107
  static
127
108
  VALUE size_to_str(VALUE self, VALUE size) {
128
- return rb_str_new2(SizeToStr(NUM2INT(size)).c_str());
109
+ return rb_str_new2(SizeToStr(NUM2INT(size)).c_str());
129
110
  }
130
111
 
131
112
  /*
@@ -133,14 +114,14 @@ VALUE size_to_str(VALUE self, VALUE size) {
133
114
  *
134
115
  * Parse the string input and return a boolean.
135
116
  *
136
- * Debian::AptPkg.string_to_bool('yes') # => 1
137
- * Debian::AptPkg.string_to_bool('no') # => 0
138
- * Debian::AptPkg.string_to_bool('no-recognized') # => -1
117
+ * Debian::AptPkg.string_to_bool('yes') # => true
118
+ * Debian::AptPkg.string_to_bool('no') # => false
119
+ * Debian::AptPkg.string_to_bool('no-recognized') # => false
139
120
  *
140
121
  **/
141
122
  static
142
123
  VALUE string_to_bool(VALUE self, VALUE text) {
143
- return INT2FIX(StringToBool(StringValuePtr(text)));
124
+ return INT2BOOL(StringToBool(StringValuePtr(text)) == 1);
144
125
  }
145
126
 
146
127
  /*
@@ -153,40 +134,56 @@ VALUE string_to_bool(VALUE self, VALUE text) {
153
134
  **/
154
135
  static
155
136
  VALUE check_domain_list(VALUE self, VALUE host, VALUE list) {
156
- int res = CheckDomainList(StringValuePtr(host), StringValuePtr(list));
157
- return INT2BOOL(res);
137
+ int res = CheckDomainList(StringValuePtr(host), StringValuePtr(list));
138
+ return INT2BOOL(res);
158
139
  }
159
140
 
160
141
  void
161
142
  Init_apt_pkg() {
162
- /* Base module */
163
- VALUE rb_mDebian = rb_define_module("Debian");
164
- VALUE rb_mDebianAptPkg = rb_define_module_under(rb_mDebian, "AptPkg");
143
+ pkgInitConfig(*_config);
144
+ pkgInitSystem(*_config, _system);
145
+
146
+ /* Base module */
147
+ VALUE rb_mDebian = rb_define_module("Debian");
148
+ VALUE rb_mDebianAptPkg = rb_define_module_under(rb_mDebian, "AptPkg");
149
+ VALUE rb_mDebianAptPkgConfiguration
150
+ = rb_define_module_under(rb_mDebianAptPkg, "Configuration");
151
+
152
+ rb_define_singleton_method(rb_mDebianAptPkg, "uri_to_filename",
153
+ RUBY_METHOD_FUNC(uri_to_filename), 1);
154
+ rb_define_singleton_method(rb_mDebianAptPkg, "time_to_str",
155
+ RUBY_METHOD_FUNC(time_to_str), 1);
156
+ rb_define_singleton_method(rb_mDebianAptPkg, "size_to_str",
157
+ RUBY_METHOD_FUNC(size_to_str), 1);
158
+ rb_define_singleton_method(rb_mDebianAptPkg, "string_to_bool",
159
+ RUBY_METHOD_FUNC(string_to_bool), 1);
160
+ rb_define_singleton_method(rb_mDebianAptPkg, "check_domain_list",
161
+ RUBY_METHOD_FUNC(check_domain_list), 2);
162
+ rb_define_singleton_method(rb_mDebianAptPkg, "cmp_version",
163
+ RUBY_METHOD_FUNC(cmp_version), 2);
164
+ rb_define_singleton_method(rb_mDebianAptPkg, "check_dep",
165
+ RUBY_METHOD_FUNC(check_dep), 3);
166
+ rb_define_singleton_method(rb_mDebianAptPkg, "upstream_version",
167
+ RUBY_METHOD_FUNC(upstream_version), 1);
165
168
 
166
- rb_define_singleton_method(rb_mDebianAptPkg, "cmp_version", RUBY_METHOD_FUNC(cmp_version), 2);
167
- rb_define_singleton_method(rb_mDebianAptPkg, "check_dep", RUBY_METHOD_FUNC(check_dep), 3);
168
- rb_define_singleton_method(rb_mDebianAptPkg, "uri_to_filename", RUBY_METHOD_FUNC(uri_to_filename), 1);
169
- rb_define_singleton_method(rb_mDebianAptPkg, "upstream_version", RUBY_METHOD_FUNC(upstream_version), 1);
170
- rb_define_singleton_method(rb_mDebianAptPkg, "time_to_str", RUBY_METHOD_FUNC(time_to_str), 1);
171
- rb_define_singleton_method(rb_mDebianAptPkg, "size_to_str", RUBY_METHOD_FUNC(size_to_str), 1);
172
- rb_define_singleton_method(rb_mDebianAptPkg, "string_to_bool", RUBY_METHOD_FUNC(string_to_bool), 1);
173
- rb_define_singleton_method(rb_mDebianAptPkg, "check_domain_list", RUBY_METHOD_FUNC(check_domain_list), 2);
169
+ /* Represents less equal operator. */
170
+ rb_define_const(rb_mDebianAptPkg, "LESS_EQ", INT2FIX(pkgCache::Dep::LessEq));
171
+ /* Represents greater equal operator. */
172
+ rb_define_const(rb_mDebianAptPkg, "GREATER_EQ", INT2FIX(pkgCache::Dep::GreaterEq));
173
+ /* Represents less operator. */
174
+ rb_define_const(rb_mDebianAptPkg, "LESS", INT2FIX(pkgCache::Dep::Less));
175
+ /* Represents greater operator. */
176
+ rb_define_const(rb_mDebianAptPkg, "GREATER", INT2FIX(pkgCache::Dep::Greater));
177
+ /* Represents equals operator. */
178
+ rb_define_const(rb_mDebianAptPkg, "EQUALS", INT2FIX(pkgCache::Dep::Equals));
179
+ /* Represents not equals operator. */
180
+ rb_define_const(rb_mDebianAptPkg, "NOT_EQUALS", INT2FIX(pkgCache::Dep::NotEquals));
174
181
 
175
- /* Represents less equal operator. */
176
- rb_define_const(rb_mDebianAptPkg, "LESS_EQ", INT2FIX(pkgCache::Dep::LessEq));
177
- /* Represents greater equal operator. */
178
- rb_define_const(rb_mDebianAptPkg, "GREATER_EQ", INT2FIX(pkgCache::Dep::GreaterEq));
179
- /* Represents less operator. */
180
- rb_define_const(rb_mDebianAptPkg, "LESS", INT2FIX(pkgCache::Dep::Less));
181
- /* Represents greater operator. */
182
- rb_define_const(rb_mDebianAptPkg, "GREATER", INT2FIX(pkgCache::Dep::Greater));
183
- /* Represents equals operator. */
184
- rb_define_const(rb_mDebianAptPkg, "EQUALS", INT2FIX(pkgCache::Dep::Equals));
185
- /* Represents not equals operator. */
186
- rb_define_const(rb_mDebianAptPkg, "NOT_EQUALS", INT2FIX(pkgCache::Dep::NotEquals));
182
+ /* Represents the version of apt. */
183
+ rb_define_const(rb_mDebianAptPkg, "VERSION", rb_str_new2(pkgVersion));
184
+ /* Represents the version of apt_pkg library. */
185
+ rb_define_const(rb_mDebianAptPkg, "LIB_VERSION", rb_str_new2(pkgLibVersion));
187
186
 
188
- /* Represents the version of apt. */
189
- rb_define_const(rb_mDebianAptPkg, "VERSION", rb_str_new2(pkgVersion));
190
- /* Represents the version of apt_pkg library. */
191
- rb_define_const(rb_mDebianAptPkg, "LIB_VERSION", rb_str_new2(pkgLibVersion));
187
+ init_apt_pkg_configuration();
188
+ init_apt_pkg_pkgcache();
192
189
  }
@@ -0,0 +1,24 @@
1
+ #include <ruby.h>
2
+ #include <apt-pkg/deblistparser.h>
3
+ #include <apt-pkg/debversion.h>
4
+ #include <apt-pkg/pkgcache.h>
5
+ #include <apt-pkg/strutl.h>
6
+ #include <apt-pkg/init.h>
7
+
8
+ /* from '<ruby/dl.h>' */
9
+ #define INT2BOOL(x) ((x) ? Qtrue : Qfalse)
10
+
11
+ using namespace std;
12
+
13
+ /* function prototypes */
14
+ extern "C" void Init_apt_pkg();
15
+ /* String functions */
16
+ static VALUE uri_to_filename(VALUE self, VALUE uri);
17
+ static VALUE time_to_str(VALUE self, VALUE secondes);
18
+ static VALUE size_to_str(VALUE self, VALUE size);
19
+ static VALUE string_to_bool(VALUE self, VALUE text);
20
+ static VALUE check_domain_list(VALUE self, VALUE host, VALUE list);
21
+ /* Versioning */
22
+ static VALUE cmp_version(VALUE self, VALUE pkg_version_a, VALUE pkg_version_b);
23
+ static VALUE check_dep(VALUE self, VALUE pkg_version_a, VALUE cmp_type, VALUE pkg_version_b);
24
+ static VALUE upstream_version(VALUE self, VALUE ver);
@@ -0,0 +1,182 @@
1
+ #include "configuration.h"
2
+
3
+ /*
4
+ * call-seq: architectures() -> array
5
+ *
6
+ * Return the list of architectures supported on this system.
7
+ *
8
+ * Debian::AptPkg::Configuration.architectures # => ["amd64"]
9
+ *
10
+ **/
11
+ static
12
+ VALUE architectures(VALUE self) {
13
+ VALUE result = rb_ary_new();
14
+ std::vector<std::string> arches = APT::Configuration::getArchitectures();
15
+ std::vector<std::string>::const_iterator I;
16
+ for (I = arches.begin(); I != arches.end(); I++)
17
+ {
18
+ rb_ary_push(result, rb_str_new2((*I).c_str()));
19
+ }
20
+ return result;
21
+ }
22
+
23
+ /*
24
+ * call-seq: check_architecture(arch) -> bool
25
+ *
26
+ * Are we interested in the given Architecture.
27
+ *
28
+ * Debian::AptPkg::Configuration.check_architecture("all") # => true
29
+ *
30
+ **/
31
+ static
32
+ VALUE check_architecture(VALUE self, VALUE arch) {
33
+ int res = APT::Configuration::checkArchitecture(StringValuePtr(arch));
34
+ return INT2BOOL(res);
35
+ }
36
+
37
+ /*
38
+ * call-seq: languages() -> array
39
+ *
40
+ * Return the list of languages code.
41
+ *
42
+ * Params:
43
+ *
44
+ * +all+:: All languages code or short for false.
45
+ *
46
+ * Debian::AptPkg::Configuration.languages # => ["en", "none", "fr"]
47
+ * Debian::AptPkg::Configuration.languages(false) # => ["en"]
48
+ *
49
+ **/
50
+ static
51
+ VALUE languages(int argc, VALUE* argv, VALUE self) {
52
+ VALUE all;
53
+ rb_scan_args(argc, argv, "01", &all);
54
+ VALUE result = rb_ary_new();
55
+ std::vector<std::string> const langs = APT::Configuration::getLanguages(all);
56
+ std::vector<std::string>::const_iterator I;
57
+ for (I = langs.begin(); I != langs.end(); I++)
58
+ {
59
+ rb_ary_push(result, rb_str_new2((*I).c_str()));
60
+ }
61
+ return result;
62
+ }
63
+
64
+ /*
65
+ * call-seq: check_language(lang, all) -> bool
66
+ *
67
+ * Are we interested in the given language.
68
+ *
69
+ * Debian::AptPkg::Configuration.check_language("fr") # => true
70
+ *
71
+ **/
72
+ static
73
+ VALUE check_language(int argc, VALUE* argv, VALUE self) {
74
+ if (argc > 2 || argc == 0) {
75
+ rb_raise(rb_eArgError, "wrong number of arguments");
76
+ }
77
+ VALUE lang, all;
78
+ rb_scan_args(argc, argv, "11", &lang, &all);
79
+ int res = APT::Configuration::checkLanguage(StringValuePtr(lang), all);
80
+ return INT2BOOL(res);
81
+ }
82
+
83
+ /*
84
+ * call-seq: compressors() -> array
85
+ *
86
+ * Return the list of compressors supported on this system.
87
+ *
88
+ * Debian::AptPkg::Configuration.compressors # => ["gz"]
89
+ *
90
+ **/
91
+ static
92
+ VALUE compressors(VALUE self) {
93
+ VALUE result = rb_ary_new();
94
+ std::vector<std::string> cmps = APT::Configuration::getCompressionTypes();
95
+ std::vector<std::string>::const_iterator I;
96
+ for (I = cmps.begin(); I != cmps.end(); I++)
97
+ {
98
+ rb_ary_push(result, rb_str_new2((*I).c_str()));
99
+ }
100
+ return result;
101
+ }
102
+
103
+ /*
104
+ * call-seq: config_find(name, default_key = '') -> string
105
+ *
106
+ * Return the value stored at the option named key, or the value given by the
107
+ * string default if the option in question is not set.
108
+ *
109
+ * Params:
110
+ *
111
+ * +name+:: Key name.
112
+ * +default_key+:: Default key when config option not set.
113
+ *
114
+ * Debian::AptPkg::Configuration.config_find('Dir::Etc::main') # => "apt.conf"
115
+ *
116
+ **/
117
+ static
118
+ VALUE config_find(int argc, VALUE* argv, VALUE self) {
119
+ if (argc > 2 || argc == 0) {
120
+ rb_raise(rb_eArgError, "wrong number of arguments");
121
+ }
122
+ VALUE name, default_key;
123
+ rb_scan_args(argc, argv, "11", &name, &default_key);
124
+ if (NIL_P(default_key))
125
+ default_key = rb_str_new2("");
126
+ return rb_str_new2(_config->Find(StringValuePtr(name),
127
+ StringValuePtr(default_key)).c_str());
128
+ }
129
+
130
+ /*
131
+ * call-seq: config_find_file(name, default_key = '') -> string
132
+ *
133
+ * Locate the given key using find() and return the path to the file/directory.
134
+ * This uses a special algorithms which moves upwards in the configuration space
135
+ * and prepends the values of the options to the result. These methods are
136
+ * generally used for the options stored in the ‘Dir’ section of the
137
+ * configuration.
138
+ *
139
+ * Params:
140
+ *
141
+ * +name+:: Key name.
142
+ * +default_key+:: Default key when config option not set.
143
+ *
144
+ * Debian::AptPkg::Configuration.config_find_file('Dir::Etc::main') # => "/etc/apt/apt.conf"
145
+ *
146
+ **/
147
+ static
148
+ VALUE config_find_file(int argc, VALUE* argv, VALUE self) {
149
+ if (argc > 2 || argc == 0) {
150
+ rb_raise(rb_eArgError, "wrong number of arguments");
151
+ }
152
+ VALUE name, default_key;
153
+ rb_scan_args(argc, argv, "11", &name, &default_key);
154
+ if (NIL_P(default_key))
155
+ default_key = rb_str_new2("");
156
+ return rb_str_new2(_config->FindFile(StringValuePtr(name),
157
+ StringValuePtr(default_key)).c_str());
158
+ }
159
+
160
+ void
161
+ init_apt_pkg_configuration() {
162
+ VALUE rb_mDebian = rb_define_module("Debian");
163
+ VALUE rb_mDebianAptPkg = rb_define_module_under(rb_mDebian, "AptPkg");
164
+ VALUE rb_mDebianAptPkgConfiguration =
165
+ rb_define_module_under(rb_mDebianAptPkg, "Configuration");
166
+
167
+ rb_define_singleton_method(rb_mDebianAptPkgConfiguration, "architectures",
168
+ RUBY_METHOD_FUNC(architectures), 0);
169
+ rb_define_singleton_method(rb_mDebianAptPkgConfiguration, "check_architecture",
170
+ RUBY_METHOD_FUNC(check_architecture), 1);
171
+ rb_define_singleton_method(rb_mDebianAptPkgConfiguration, "languages",
172
+ RUBY_METHOD_FUNC(languages), -1);
173
+ rb_define_singleton_method(rb_mDebianAptPkgConfiguration, "check_language",
174
+ RUBY_METHOD_FUNC(check_language), -1);
175
+ rb_define_singleton_method(rb_mDebianAptPkgConfiguration, "compressors",
176
+ RUBY_METHOD_FUNC(compressors), 0);
177
+
178
+ rb_define_singleton_method(rb_mDebianAptPkgConfiguration, "config_find",
179
+ RUBY_METHOD_FUNC(config_find), -1);
180
+ rb_define_singleton_method(rb_mDebianAptPkgConfiguration, "config_find_file",
181
+ RUBY_METHOD_FUNC(config_find_file), -1);
182
+ }
@@ -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,65 @@
1
+ #include "pkgcache.h"
2
+
3
+ /*
4
+ * call-seq: gen_caches() -> bool
5
+ *
6
+ * Call the main cache generator.
7
+ *
8
+ * Debian::AptPkg::PkgCache.gen_caches # => false
9
+ *
10
+ **/
11
+ static
12
+ VALUE gen_caches(VALUE self) {
13
+ pkgCacheFile CacheFile;
14
+ int res = CacheFile.BuildCaches(NULL, true);
15
+ return INT2BOOL(res);
16
+ }
17
+
18
+ /*
19
+ * call-seq: pkg_names() -> array, nil
20
+ *
21
+ * List the names of all packages in the system.
22
+ * Return nil when cache is not generated.
23
+ *
24
+ * Debian::AptPkg::PkgCache.pkg_names('gcolor2') # => ["gcolor2"]
25
+ *
26
+ **/
27
+ static
28
+ VALUE pkg_names(int argc, VALUE* argv, VALUE self) {
29
+ if (argc > 1 || argc == 0) {
30
+ rb_raise(rb_eArgError, "You must give at least one search argument");
31
+ }
32
+ VALUE name;
33
+ rb_scan_args(argc, argv, "01", &name);
34
+ if (NIL_P(name) || RSTRING_LEN(name) < 1) {
35
+ rb_raise(rb_eArgError, "You must give at least one search pattern");
36
+ }
37
+ VALUE result = rb_ary_new();
38
+
39
+ pkgCacheFile CacheFile;
40
+ if (CacheFile.GetPkgCache() == 0) {
41
+ return Qnil;
42
+ }
43
+ pkgCache::GrpIterator I = CacheFile.GetPkgCache()->GrpBegin();
44
+
45
+ const char *pkgname = StringValuePtr(name);
46
+ for (;I.end() != true; ++I) {
47
+ if (strncmp(I.Name(), pkgname, strlen(pkgname)) == 0) {
48
+ rb_ary_push(result, rb_str_new2(I.Name()));
49
+ }
50
+ }
51
+ return result;
52
+ }
53
+
54
+ void
55
+ init_apt_pkg_pkgcache() {
56
+ VALUE rb_mDebian = rb_define_module("Debian");
57
+ VALUE rb_mDebianAptPkg = rb_define_module_under(rb_mDebian, "AptPkg");
58
+ VALUE rb_mDebianAptPkgConfiguration = rb_define_module_under(rb_mDebianAptPkg,
59
+ "PkgCache");
60
+
61
+ rb_define_singleton_method(rb_mDebianAptPkgConfiguration, "gen_caches",
62
+ RUBY_METHOD_FUNC(gen_caches), 0);
63
+ rb_define_singleton_method(rb_mDebianAptPkgConfiguration, "pkg_names",
64
+ RUBY_METHOD_FUNC(pkg_names), -1);
65
+ }
@@ -0,0 +1,7 @@
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
+
7
+ void init_apt_pkg_pkgcache();
@@ -0,0 +1,40 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Debian::AptPkg::PkgCache do
4
+ describe '.gen_caches' do
5
+ it 'return boolean' do
6
+ if Process.uid == 0
7
+ Debian::AptPkg::PkgCache.gen_caches.must_equal true
8
+ else
9
+ Debian::AptPkg::PkgCache.gen_caches.must_equal false
10
+ end
11
+ end
12
+ end
13
+
14
+ describe '.pkg_names' do
15
+ it 'argument' do
16
+ lambda {
17
+ Debian::AptPkg::PkgCache.pkg_names
18
+ }.must_raise ArgumentError
19
+
20
+ lambda {
21
+ Debian::AptPkg::PkgCache.pkg_names(nil)
22
+ }.must_raise ArgumentError
23
+
24
+ lambda {
25
+ Debian::AptPkg::PkgCache.pkg_names("")
26
+ }.must_raise ArgumentError
27
+ end
28
+
29
+ it 'be filtered' do
30
+ search = Debian::AptPkg::PkgCache.pkg_names("vim")
31
+ # CI specific cache can not be present
32
+ unless search.nil? || search.empty?
33
+ search.must_include "vim"
34
+ search.must_include "vim-nox"
35
+ search.must_include "vim-gtk"
36
+ search.wont_include "emacs"
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,74 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Debian::AptPkg::Configuration do
4
+ it 'architectures return an array' do
5
+ arches = Debian::AptPkg::Configuration.architectures
6
+ arches.must_be_instance_of Array
7
+ arches.wont_be_empty
8
+ end
9
+
10
+ it 'languages return an array' do
11
+ all_langs = Debian::AptPkg::Configuration.languages
12
+ all_langs.must_be_instance_of Array
13
+ all_langs.wont_be_empty
14
+
15
+ langs = Debian::AptPkg::Configuration.languages(false)
16
+ langs.must_be_instance_of Array
17
+ end
18
+
19
+ it 'check_architecture' do
20
+ Debian::AptPkg::Configuration.check_architecture('all').must_equal true
21
+
22
+ arches = Debian::AptPkg::Configuration.architectures
23
+ c = Debian::AptPkg::Configuration.check_architecture(arches.first)
24
+ c.must_equal true
25
+
26
+ # http://buildd.debian-ports.org/status/fetch.php?pkg=ruby2.1&arch=m68k&ver=2.1.2-2&stamp=1400604298
27
+ Debian::AptPkg::Configuration.check_architecture('m68k').must_equal false
28
+ end
29
+
30
+ it 'check_language' do
31
+ lambda {
32
+ Debian::AptPkg::Configuration.check_language
33
+ }.must_raise ArgumentError
34
+
35
+ langs = Debian::AptPkg::Configuration.languages
36
+ Debian::AptPkg::Configuration.check_language(langs.first).must_equal true
37
+
38
+ c = Debian::AptPkg::Configuration.check_language('gallifreyan')
39
+ c.must_equal false
40
+ end
41
+
42
+ it 'compressors return an array' do
43
+ cmps = Debian::AptPkg::Configuration.compressors
44
+ cmps.must_be_instance_of Array
45
+ cmps.wont_be_empty
46
+ cmps.must_include 'gz'
47
+ end
48
+
49
+ it 'find configuration value' do
50
+ lambda {
51
+ Debian::AptPkg::Configuration.config_find
52
+ }.must_raise ArgumentError
53
+
54
+ Debian::AptPkg::Configuration.config_find('Dir::Etc::main').
55
+ must_equal "apt.conf"
56
+ Debian::AptPkg::Configuration.config_find('Dir::Etc::netrc').
57
+ must_equal "auth.conf"
58
+ Debian::AptPkg::Configuration.config_find('Dir::Etc::parts').
59
+ must_equal "apt.conf.d"
60
+ Debian::AptPkg::Configuration.config_find('Spk', 'DebianUser').
61
+ must_equal "DebianUser"
62
+ end
63
+
64
+ it 'find file' do
65
+ lambda {
66
+ Debian::AptPkg::Configuration.config_find_file
67
+ }.must_raise ArgumentError
68
+
69
+ Debian::AptPkg::Configuration.config_find_file('Dir::Etc::main').
70
+ must_equal "/etc/apt/apt.conf"
71
+ Debian::AptPkg::Configuration.config_find_file('Dir::Etc::netrc').
72
+ must_equal "/etc/apt/auth.conf"
73
+ end
74
+ end
data/test/apt_pkg_test.rb CHANGED
@@ -1,9 +1,7 @@
1
- # encoding: UTF-8
2
1
  require_relative 'test_helper'
3
2
 
4
3
  describe Debian::AptPkg do
5
-
6
- describe 'Debian::AptPkg.cmp_version' do
4
+ describe '.cmp_version' do
7
5
  it 'should compare version' do
8
6
  Debian::AptPkg.cmp_version('1.1', '1.0').must_be :>, 0
9
7
  Debian::AptPkg.cmp_version('1.0', '1.0').must_be :==, 0
@@ -11,7 +9,7 @@ describe Debian::AptPkg do
11
9
  end
12
10
  end
13
11
 
14
- describe 'Debian::AptPkg.check_dep' do
12
+ describe '.check_dep' do
15
13
  describe 'LessEq' do
16
14
  it 'should compare Debian version' do
17
15
  Debian::AptPkg.check_dep('1', '<=', '2').must_equal true
@@ -19,6 +17,7 @@ describe Debian::AptPkg do
19
17
  Debian::AptPkg.check_dep('1', '<=', '1').must_equal true
20
18
  end
21
19
  end
20
+
22
21
  describe 'GreaterEq' do
23
22
  it 'should compare Debian version' do
24
23
  Debian::AptPkg.check_dep('1', '>=', '2').must_equal false
@@ -26,6 +25,7 @@ describe Debian::AptPkg do
26
25
  Debian::AptPkg.check_dep('1', '>=', '1').must_equal true
27
26
  end
28
27
  end
28
+
29
29
  describe 'Less' do
30
30
  it 'should compare Debian version' do
31
31
  Debian::AptPkg.check_dep('1', '<', '2').must_equal true
@@ -33,6 +33,7 @@ describe Debian::AptPkg do
33
33
  Debian::AptPkg.check_dep('1', '<', '1').must_equal false
34
34
  end
35
35
  end
36
+
36
37
  describe 'Greater' do
37
38
  it 'should compare Debian version' do
38
39
  Debian::AptPkg.check_dep('1', '>', '2').must_equal false
@@ -40,6 +41,7 @@ describe Debian::AptPkg do
40
41
  Debian::AptPkg.check_dep('1', '>', '1').must_equal false
41
42
  end
42
43
  end
44
+
43
45
  describe 'Equals' do
44
46
  it 'should compare Debian version' do
45
47
  Debian::AptPkg.check_dep('1', '=', '2').must_equal false
@@ -47,56 +49,66 @@ describe Debian::AptPkg do
47
49
  Debian::AptPkg.check_dep('1', '=', '1').must_equal true
48
50
  end
49
51
  end
52
+
50
53
  describe 'NotEquals' do
51
54
  it 'should compare Debian version' do
52
- Debian::AptPkg.check_dep('1', Debian::AptPkg::NOT_EQUALS, '2').must_equal true
53
- Debian::AptPkg.check_dep('2', Debian::AptPkg::NOT_EQUALS, '1').must_equal true
54
- Debian::AptPkg.check_dep('1', Debian::AptPkg::NOT_EQUALS, '1').must_equal false
55
+ Debian::AptPkg.check_dep('1', Debian::AptPkg::NOT_EQUALS, '2').
56
+ must_equal true
57
+ Debian::AptPkg.check_dep('2', Debian::AptPkg::NOT_EQUALS, '1').
58
+ must_equal true
59
+ Debian::AptPkg.check_dep('1', Debian::AptPkg::NOT_EQUALS, '1').
60
+ must_equal false
55
61
  end
56
62
  end
63
+
57
64
  describe 'Errors' do
58
65
  it 'should raise argument error with bad comparison' do
59
- lambda { Debian::AptPkg.check_dep('1', 'bad', '2') }.must_raise ArgumentError
66
+ lambda {
67
+ Debian::AptPkg.check_dep('1', 'bad', '2')
68
+ }.must_raise ArgumentError
60
69
  end
61
70
  end
62
71
  end
63
72
 
64
- describe 'Debian::AptPkg.uri_to_filename' do
73
+ describe '.uri_to_filename' do
65
74
  it 'should return a filename which can be used to store the file' do
66
- Debian::AptPkg.uri_to_filename('http://debian.org/index.html').must_equal 'debian.org_index.html'
75
+ Debian::AptPkg.uri_to_filename('http://debian.org/index.html').
76
+ must_equal 'debian.org_index.html'
67
77
  end
68
78
  end
69
79
 
70
- describe 'Debian::AptPkg.upstream_version' do
71
- it 'Return the upstream version for the Debian package version given by version' do
80
+ describe '.upstream_version' do
81
+ it 'Return the upstream version for the Debian package version' do
72
82
  Debian::AptPkg.upstream_version('3.4.15-1+b1').must_equal '3.4.15'
73
83
  end
74
84
  end
75
85
 
76
- describe 'Debian::AptPkg.time_to_str' do
86
+ describe '.time_to_str' do
77
87
  it 'Format a given duration in human-readable manner' do
78
88
  Debian::AptPkg.time_to_str(3601).must_equal '1h 0min 1s'
79
89
  end
80
90
  end
81
91
 
82
- describe 'Debian::AptPkg.size_to_str' do
92
+ describe '.size_to_str' do
83
93
  it 'Return a string describing the size in a human-readable manner' do
84
94
  Debian::AptPkg.size_to_str(10000).must_equal '10.0 k'
85
95
  end
86
96
  end
87
97
 
88
- describe 'Debian::AptPkg.string_to_bool' do
98
+ describe '.string_to_bool' do
89
99
  it 'Parse the string input and return a boolean' do
90
- Debian::AptPkg.string_to_bool('yes').must_equal 1
91
- Debian::AptPkg.string_to_bool('no').must_equal 0
92
- Debian::AptPkg.string_to_bool('no-recognized').must_equal -1
100
+ Debian::AptPkg.string_to_bool('yes').must_equal true
101
+ Debian::AptPkg.string_to_bool('no').must_equal false
102
+ Debian::AptPkg.string_to_bool('no-recognized').must_equal false
93
103
  end
94
104
  end
95
105
 
96
- describe 'Debian::AptPkg.check_domain_list' do
106
+ describe '.check_domain_list' do
97
107
  it 'See if the host name given by host is one of the domains given' do
98
- Debian::AptPkg.check_domain_list("alioth.debian.org", "debian.net,debian.org").must_equal true
99
- Debian::AptPkg.check_domain_list("git.debian.org", "spkdev.net").must_equal false
108
+ Debian::AptPkg.check_domain_list("alioth.debian.org",
109
+ "debian.net,debian.org").must_equal true
110
+ Debian::AptPkg.check_domain_list("git.debian.org",
111
+ "spkdev.net").must_equal false
100
112
  end
101
113
  end
102
114
  end
data/test/test_helper.rb CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  $VERBOSE = true
3
2
  require 'minitest/autorun'
4
3
  require 'minitest/pride'
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apt-pkg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Arnoud
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-08 00:00:00.000000000 Z
11
+ date: 2015-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake-compiler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rdoc
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: Ruby interface to apt-pkg
@@ -72,17 +72,25 @@ executables: []
72
72
  extensions:
73
73
  - ext/apt_pkg/extconf.rb
74
74
  extra_rdoc_files:
75
+ - History.md
75
76
  - README.md
77
+ - ext/apt_pkg/configuration.cpp
76
78
  - ext/apt_pkg/apt-pkg.cpp
79
+ - ext/apt_pkg/pkgcache.cpp
77
80
  files:
78
- - .gitignore
79
81
  - Gemfile
82
+ - History.md
80
83
  - LICENSE
81
84
  - README.md
82
- - Rakefile
83
- - apt-pkg.gemspec
84
85
  - ext/apt_pkg/apt-pkg.cpp
86
+ - ext/apt_pkg/apt-pkg.h
87
+ - ext/apt_pkg/configuration.cpp
88
+ - ext/apt_pkg/configuration.h
85
89
  - ext/apt_pkg/extconf.rb
90
+ - ext/apt_pkg/pkgcache.cpp
91
+ - ext/apt_pkg/pkgcache.h
92
+ - test/apt_pkg_cache_test.rb
93
+ - test/apt_pkg_configuration_test.rb
86
94
  - test/apt_pkg_test.rb
87
95
  - test/test_helper.rb
88
96
  homepage: http://github.com/spk/ruby-apt-pkg
@@ -91,23 +99,24 @@ licenses:
91
99
  metadata: {}
92
100
  post_install_message:
93
101
  rdoc_options:
94
- - --charset=UTF-8
102
+ - "--charset=UTF-8"
95
103
  require_paths:
96
104
  - lib
97
105
  required_ruby_version: !ruby/object:Gem::Requirement
98
106
  requirements:
99
- - - '>='
107
+ - - ">="
100
108
  - !ruby/object:Gem::Version
101
109
  version: '0'
102
110
  required_rubygems_version: !ruby/object:Gem::Requirement
103
111
  requirements:
104
- - - '>='
112
+ - - ">="
105
113
  - !ruby/object:Gem::Version
106
114
  version: '0'
107
115
  requirements: []
108
116
  rubyforge_project:
109
- rubygems_version: 2.0.14
117
+ rubygems_version: 2.4.5.1
110
118
  signing_key:
111
119
  specification_version: 4
112
120
  summary: Ruby interface to libapt-pkg
113
121
  test_files: []
122
+ has_rdoc:
data/.gitignore DELETED
@@ -1,4 +0,0 @@
1
- tmp/
2
- html/
3
- *.gem
4
- Gemfile.lock
data/Rakefile DELETED
@@ -1,18 +0,0 @@
1
- require 'rake/extensiontask'
2
- require 'rake/testtask'
3
- require 'rdoc/task'
4
-
5
- Rake::ExtensionTask.new('apt_pkg')
6
-
7
- Rake::Task[:test].prerequisites << :clean
8
- Rake::Task[:test].prerequisites << :compile
9
-
10
- Rake::TestTask.new do |t|
11
- t.pattern = 'test/**/*_test.rb'
12
- end
13
-
14
- RDoc::Task.new do |rd|
15
- rd.rdoc_files.include("ext/**/*.cpp")
16
- end
17
-
18
- task default: [:test]
data/apt-pkg.gemspec DELETED
@@ -1,20 +0,0 @@
1
- Gem::Specification.new do |s|
2
- s.name = "apt-pkg"
3
- s.version = '0.0.2'
4
-
5
- s.authors = ["Laurent Arnoud"]
6
- s.description = %q{Ruby interface to apt-pkg}
7
- s.summary = %q{Ruby interface to libapt-pkg}
8
- s.email = %q{laurent@spkdev.net}
9
- s.license = "MIT"
10
- s.extensions = ["ext/apt_pkg/extconf.rb"]
11
- s.extra_rdoc_files = Dir['*.md', 'ext/**/*.cpp']
12
- s.files = `git ls-files`.split($\)
13
- s.homepage = %q{http://github.com/spk/ruby-apt-pkg}
14
- s.rdoc_options = ["--charset=UTF-8"]
15
- s.require_paths = ["lib"]
16
- s.add_development_dependency('rake')
17
- s.add_development_dependency('rake-compiler')
18
- s.add_development_dependency('minitest')
19
- s.add_development_dependency('rdoc')
20
- end