ruby-rpm 1.2.2
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.
- data/COPYING +340 -0
- data/ChangeLog +434 -0
- data/NEWS +14 -0
- data/README +38 -0
- data/Rakefile +107 -0
- data/doc/refm.rd.ja +913 -0
- data/ext/rpm/MANIFEST +13 -0
- data/ext/rpm/db.c +1128 -0
- data/ext/rpm/dependency.c +330 -0
- data/ext/rpm/extconf.rb +78 -0
- data/ext/rpm/file.c +281 -0
- data/ext/rpm/package.c +800 -0
- data/ext/rpm/private.h +114 -0
- data/ext/rpm/rpm.c +660 -0
- data/ext/rpm/rpm40_compat.c +28 -0
- data/ext/rpm/rpm40_compat.h +9 -0
- data/ext/rpm/ruby-rpm.h +181 -0
- data/ext/rpm/source.c +152 -0
- data/ext/rpm/spec.c +346 -0
- data/ext/rpm/version.c +341 -0
- data/install.rb +1015 -0
- data/lib/rpm.rb +143 -0
- data/spec/fedora/ruby-rpm.spec +226 -0
- data/tests/runner.rb +15 -0
- data/tests/test_db.rb +44 -0
- data/tests/test_dependency.rb +29 -0
- data/tests/test_file.rb +13 -0
- data/tests/test_rpm.rb +13 -0
- data/tests/test_source.rb +31 -0
- data/tests/test_ts.rb +169 -0
- data/tests/test_version.rb +51 -0
- metadata +77 -0
@@ -0,0 +1,330 @@
|
|
1
|
+
/* -*- mode: C; c-basic-offset: 4; tab-width: 4; -*- */
|
2
|
+
/* Ruby/RPM
|
3
|
+
*
|
4
|
+
* Copyright (C) 2002 Kenta MURATA <muraken2@nifty.com>.
|
5
|
+
*/
|
6
|
+
|
7
|
+
/* $Id: dependency.c 42 2004-06-03 14:26:37Z kazuhiko $ */
|
8
|
+
|
9
|
+
#include "private.h"
|
10
|
+
|
11
|
+
VALUE rpm_cDependency;
|
12
|
+
VALUE rpm_cProvide;
|
13
|
+
VALUE rpm_cRequire;
|
14
|
+
VALUE rpm_cConflict;
|
15
|
+
VALUE rpm_cObsolete;
|
16
|
+
|
17
|
+
static ID id_name;
|
18
|
+
static ID id_ver;
|
19
|
+
static ID id_flags;
|
20
|
+
static ID id_owner;
|
21
|
+
|
22
|
+
static ID id_nametag;
|
23
|
+
static ID id_versiontag;
|
24
|
+
static ID id_flagstag;
|
25
|
+
|
26
|
+
static VALUE
|
27
|
+
dependency_initialize(VALUE dep, VALUE name, VALUE version,
|
28
|
+
VALUE flags, VALUE owner)
|
29
|
+
{
|
30
|
+
if (TYPE(name) != T_STRING
|
31
|
+
|| (!NIL_P(version) && rb_obj_is_kind_of(version, rpm_cVersion) == Qfalse)) {
|
32
|
+
rb_raise(rb_eTypeError, "illegal argument type");
|
33
|
+
}
|
34
|
+
|
35
|
+
rb_ivar_set(dep, id_name, name);
|
36
|
+
rb_ivar_set(dep, id_ver, version);
|
37
|
+
rb_ivar_set(dep, id_flags, rb_Integer(flags));
|
38
|
+
rb_ivar_set(dep, id_owner, owner);
|
39
|
+
return dep;
|
40
|
+
}
|
41
|
+
|
42
|
+
static VALUE
|
43
|
+
provide_initialize(VALUE dep, VALUE name, VALUE version,
|
44
|
+
VALUE flags, VALUE owner)
|
45
|
+
{
|
46
|
+
dependency_initialize(dep,name,version,flags,owner);
|
47
|
+
rb_ivar_set(dep, id_nametag, INT2NUM(RPMTAG_PROVIDENAME));
|
48
|
+
rb_ivar_set(dep, id_versiontag, INT2NUM(RPMTAG_PROVIDEVERSION));
|
49
|
+
rb_ivar_set(dep, id_flagstag, INT2NUM(RPMTAG_PROVIDEFLAGS));
|
50
|
+
return dep;
|
51
|
+
}
|
52
|
+
|
53
|
+
static VALUE
|
54
|
+
require_initialize(VALUE dep, VALUE name, VALUE version,
|
55
|
+
VALUE flags, VALUE owner)
|
56
|
+
{
|
57
|
+
dependency_initialize(dep,name,version,flags,owner);
|
58
|
+
rb_ivar_set(dep, id_nametag, INT2NUM(RPMTAG_REQUIRENAME));
|
59
|
+
rb_ivar_set(dep, id_versiontag, INT2NUM(RPMTAG_REQUIREVERSION));
|
60
|
+
rb_ivar_set(dep, id_flagstag, INT2NUM(RPMTAG_REQUIREFLAGS));
|
61
|
+
return dep;
|
62
|
+
}
|
63
|
+
|
64
|
+
static VALUE
|
65
|
+
obsolete_initialize(VALUE dep, VALUE name, VALUE version,
|
66
|
+
VALUE flags, VALUE owner)
|
67
|
+
{
|
68
|
+
dependency_initialize(dep,name,version,flags,owner);
|
69
|
+
rb_ivar_set(dep, id_nametag, INT2NUM(RPMTAG_OBSOLETENAME));
|
70
|
+
rb_ivar_set(dep, id_versiontag, INT2NUM(RPMTAG_OBSOLETEVERSION));
|
71
|
+
rb_ivar_set(dep, id_flagstag, INT2NUM(RPMTAG_OBSOLETEFLAGS));
|
72
|
+
return dep;
|
73
|
+
}
|
74
|
+
|
75
|
+
static VALUE
|
76
|
+
conflict_initialize(VALUE dep, VALUE name, VALUE version,
|
77
|
+
VALUE flags, VALUE owner)
|
78
|
+
{
|
79
|
+
dependency_initialize(dep,name,version,flags,owner);
|
80
|
+
rb_ivar_set(dep, id_nametag, INT2NUM(RPMTAG_CONFLICTNAME));
|
81
|
+
rb_ivar_set(dep, id_versiontag, INT2NUM(RPMTAG_CONFLICTVERSION));
|
82
|
+
rb_ivar_set(dep, id_flagstag, INT2NUM(RPMTAG_CONFLICTFLAGS));
|
83
|
+
return dep;
|
84
|
+
}
|
85
|
+
|
86
|
+
VALUE
|
87
|
+
rpm_provide_new(const char* name, VALUE version, int flags, VALUE target)
|
88
|
+
{
|
89
|
+
VALUE prov, argv[4];
|
90
|
+
|
91
|
+
argv[0] = rb_str_new2(name);
|
92
|
+
argv[1] = version;
|
93
|
+
argv[2] = INT2NUM(flags);
|
94
|
+
argv[3] = target;
|
95
|
+
|
96
|
+
prov = rb_newobj();
|
97
|
+
OBJSETUP(prov, rpm_cProvide, T_OBJECT);
|
98
|
+
rb_obj_call_init(prov, 4, argv);
|
99
|
+
rb_ivar_set(prov, id_nametag, INT2NUM(RPMTAG_PROVIDENAME));
|
100
|
+
rb_ivar_set(prov, id_versiontag, INT2NUM(RPMTAG_PROVIDEVERSION));
|
101
|
+
rb_ivar_set(prov, id_flagstag, INT2NUM(RPMTAG_PROVIDEFLAGS));
|
102
|
+
return prov;
|
103
|
+
}
|
104
|
+
|
105
|
+
VALUE
|
106
|
+
rpm_require_new(const char* name, VALUE version, int flags, VALUE target)
|
107
|
+
{
|
108
|
+
VALUE req, argv[4];
|
109
|
+
|
110
|
+
argv[0] = rb_str_new2(name);
|
111
|
+
argv[1] = version;
|
112
|
+
argv[2] = INT2NUM(flags);
|
113
|
+
argv[3] = target;
|
114
|
+
|
115
|
+
req = rb_newobj();
|
116
|
+
OBJSETUP(req, rpm_cRequire, T_OBJECT);
|
117
|
+
rb_obj_call_init(req, 4, argv);
|
118
|
+
rb_ivar_set(req, id_nametag, INT2NUM(RPMTAG_REQUIRENAME));
|
119
|
+
rb_ivar_set(req, id_versiontag, INT2NUM(RPMTAG_REQUIREVERSION));
|
120
|
+
rb_ivar_set(req, id_flagstag, INT2NUM(RPMTAG_REQUIREFLAGS));
|
121
|
+
return req;
|
122
|
+
}
|
123
|
+
|
124
|
+
VALUE
|
125
|
+
rpm_conflict_new(const char* name, VALUE version, int flags, VALUE target)
|
126
|
+
{
|
127
|
+
VALUE conf, argv[4];
|
128
|
+
|
129
|
+
argv[0] = rb_str_new2(name);
|
130
|
+
argv[1] = version;
|
131
|
+
argv[2] = INT2NUM(flags);
|
132
|
+
argv[3] = target;
|
133
|
+
|
134
|
+
conf = rb_newobj();
|
135
|
+
OBJSETUP(conf, rpm_cConflict, T_OBJECT);
|
136
|
+
rb_obj_call_init(conf, 4, argv);
|
137
|
+
rb_ivar_set(conf, id_nametag, INT2NUM(RPMTAG_CONFLICTNAME));
|
138
|
+
rb_ivar_set(conf, id_versiontag, INT2NUM(RPMTAG_CONFLICTVERSION));
|
139
|
+
rb_ivar_set(conf, id_flagstag, INT2NUM(RPMTAG_CONFLICTFLAGS));
|
140
|
+
return conf;
|
141
|
+
}
|
142
|
+
|
143
|
+
VALUE
|
144
|
+
rpm_obsolete_new(const char* name, VALUE version, int flags, VALUE target)
|
145
|
+
{
|
146
|
+
VALUE obso, argv[4];
|
147
|
+
|
148
|
+
argv[0] = rb_str_new2(name);
|
149
|
+
argv[1] = version;
|
150
|
+
argv[2] = INT2NUM(flags);
|
151
|
+
argv[3] = target;
|
152
|
+
|
153
|
+
obso = rb_newobj();
|
154
|
+
OBJSETUP(obso, rpm_cObsolete, T_OBJECT);
|
155
|
+
rb_obj_call_init(obso, 4, argv);
|
156
|
+
rb_ivar_set(obso, id_nametag, INT2NUM(RPMTAG_OBSOLETENAME));
|
157
|
+
rb_ivar_set(obso, id_versiontag, INT2NUM(RPMTAG_OBSOLETEVERSION));
|
158
|
+
rb_ivar_set(obso, id_flagstag, INT2NUM(RPMTAG_OBSOLETEFLAGS));
|
159
|
+
return obso;
|
160
|
+
}
|
161
|
+
|
162
|
+
VALUE
|
163
|
+
rpm_dependency_is_satisfy(VALUE dep,VALUE other)
|
164
|
+
{
|
165
|
+
int oflag;
|
166
|
+
int sflag;
|
167
|
+
char *svre;
|
168
|
+
char *ovre;
|
169
|
+
char *name;
|
170
|
+
char *oname;
|
171
|
+
if (rb_obj_is_kind_of(other,rpm_cPackage) == Qtrue){
|
172
|
+
VALUE provide;
|
173
|
+
VALUE provides = rpm_package_get_provides(other);
|
174
|
+
while (!NIL_P(provide = rb_ary_pop(provides))){
|
175
|
+
if (rpm_dependency_is_satisfy(dep,provide) == Qtrue) {
|
176
|
+
return Qtrue;
|
177
|
+
}
|
178
|
+
}
|
179
|
+
return Qfalse;
|
180
|
+
}
|
181
|
+
|
182
|
+
name = RSTRING(rb_ivar_get(dep,id_name))->ptr;
|
183
|
+
svre = RSTRING(rpm_version_to_vre(rb_ivar_get(dep,id_ver)))->ptr;
|
184
|
+
sflag = NUM2INT(rb_ivar_get(dep, id_flags));
|
185
|
+
|
186
|
+
if (rb_obj_is_kind_of(other,rpm_cDependency) == Qtrue){
|
187
|
+
oflag = NUM2INT(rb_ivar_get(other, id_flags));
|
188
|
+
oname = RSTRING(rb_ivar_get(other, id_name))->ptr;
|
189
|
+
ovre = RSTRING(rpm_version_to_vre(rb_ivar_get(other,id_ver)))->ptr;
|
190
|
+
other = rb_ivar_get(other,id_ver);
|
191
|
+
} else if (rb_obj_is_kind_of(other,rpm_cVersion) == Qtrue){
|
192
|
+
ovre = RSTRING(rpm_version_to_vre(other))->ptr;
|
193
|
+
oname = name;
|
194
|
+
if (!*ovre)
|
195
|
+
oflag = 0;
|
196
|
+
else
|
197
|
+
oflag = RPMSENSE_EQUAL;
|
198
|
+
} else {
|
199
|
+
rb_raise(rb_eTypeError, "illegal argument type");
|
200
|
+
}
|
201
|
+
|
202
|
+
#if RPM_VERSION_CODE < RPM_VERSION(4,1,0)
|
203
|
+
if (rpmRangesOverlap(name,ovre,oflag, sname,svre,sflag))
|
204
|
+
#else
|
205
|
+
if (rpmdsCompare(rpmdsSingle(RPMTAG_PROVIDENAME, oname, ovre, oflag),
|
206
|
+
rpmdsSingle(RPMTAG_PROVIDENAME, name, svre, sflag)))
|
207
|
+
#endif
|
208
|
+
return Qtrue;
|
209
|
+
return Qfalse;
|
210
|
+
}
|
211
|
+
|
212
|
+
VALUE
|
213
|
+
rpm_dependency_get_name(VALUE dep)
|
214
|
+
{
|
215
|
+
return rb_ivar_get(dep, id_name);
|
216
|
+
}
|
217
|
+
|
218
|
+
VALUE
|
219
|
+
rpm_dependency_get_version(VALUE dep)
|
220
|
+
{
|
221
|
+
return rb_ivar_get(dep, id_ver);
|
222
|
+
}
|
223
|
+
|
224
|
+
VALUE
|
225
|
+
rpm_dependency_get_flags(VALUE dep)
|
226
|
+
{
|
227
|
+
return rb_ivar_get(dep, id_flags);
|
228
|
+
}
|
229
|
+
|
230
|
+
VALUE
|
231
|
+
rpm_dependency_get_owner(VALUE dep)
|
232
|
+
{
|
233
|
+
return rb_ivar_get(dep, id_owner);
|
234
|
+
}
|
235
|
+
|
236
|
+
VALUE
|
237
|
+
rpm_dependency_get_nametag(VALUE dep)
|
238
|
+
{
|
239
|
+
return rb_ivar_get(dep, id_nametag);
|
240
|
+
}
|
241
|
+
|
242
|
+
VALUE
|
243
|
+
rpm_dependency_get_versiontag(VALUE dep)
|
244
|
+
{
|
245
|
+
return rb_ivar_get(dep, id_versiontag);
|
246
|
+
}
|
247
|
+
|
248
|
+
VALUE
|
249
|
+
rpm_dependency_get_flagstag(VALUE dep)
|
250
|
+
{
|
251
|
+
return rb_ivar_get(dep, id_flagstag);
|
252
|
+
}
|
253
|
+
|
254
|
+
VALUE
|
255
|
+
rpm_dependency_is_lt(VALUE dep)
|
256
|
+
{
|
257
|
+
return (NUM2INT(rb_ivar_get(dep, id_flags)) & RPMSENSE_LESS) ? Qtrue : Qfalse;
|
258
|
+
}
|
259
|
+
|
260
|
+
VALUE
|
261
|
+
rpm_dependency_is_gt(VALUE dep)
|
262
|
+
{
|
263
|
+
return (NUM2INT(rb_ivar_get(dep, id_flags)) & RPMSENSE_GREATER) ? Qtrue : Qfalse;
|
264
|
+
}
|
265
|
+
|
266
|
+
VALUE
|
267
|
+
rpm_dependency_is_eq(VALUE dep)
|
268
|
+
{
|
269
|
+
return (NUM2INT(rb_ivar_get(dep, id_flags)) & RPMSENSE_EQUAL) ? Qtrue : Qfalse;
|
270
|
+
}
|
271
|
+
|
272
|
+
VALUE
|
273
|
+
rpm_dependency_is_le(VALUE dep)
|
274
|
+
{
|
275
|
+
int flags = NUM2INT(rb_ivar_get(dep, id_flags));
|
276
|
+
return ((flags & RPMSENSE_LESS) && (flags & RPMSENSE_EQUAL)) ? Qtrue : Qfalse;
|
277
|
+
}
|
278
|
+
|
279
|
+
VALUE
|
280
|
+
rpm_dependency_is_ge(VALUE dep)
|
281
|
+
{
|
282
|
+
int flags = NUM2INT(rb_ivar_get(dep, id_flags));
|
283
|
+
return ((flags & RPMSENSE_GREATER) && (flags & RPMSENSE_EQUAL)) ? Qtrue : Qfalse;
|
284
|
+
}
|
285
|
+
|
286
|
+
VALUE
|
287
|
+
rpm_require_is_pre(VALUE req)
|
288
|
+
{
|
289
|
+
return (NUM2INT(rb_ivar_get(req, id_flags)) & RPMSENSE_PREREQ) ? Qtrue : Qfalse;
|
290
|
+
}
|
291
|
+
|
292
|
+
void
|
293
|
+
Init_rpm_dependency(void)
|
294
|
+
{
|
295
|
+
rpm_cDependency = rb_define_class_under(rpm_mRPM, "Dependency", rb_cObject);
|
296
|
+
rb_define_method(rpm_cDependency, "initialize", dependency_initialize, 4);
|
297
|
+
rb_define_method(rpm_cDependency, "name", rpm_dependency_get_name, 0);
|
298
|
+
rb_define_method(rpm_cDependency, "version", rpm_dependency_get_version, 0);
|
299
|
+
rb_define_method(rpm_cDependency, "flags", rpm_dependency_get_flags, 0);
|
300
|
+
rb_define_method(rpm_cDependency, "owner", rpm_dependency_get_owner, 0);
|
301
|
+
rb_define_method(rpm_cDependency, "lt?", rpm_dependency_is_lt, 0);
|
302
|
+
rb_define_method(rpm_cDependency, "gt?", rpm_dependency_is_gt, 0);
|
303
|
+
rb_define_method(rpm_cDependency, "eq?", rpm_dependency_is_eq, 0);
|
304
|
+
rb_define_method(rpm_cDependency, "le?", rpm_dependency_is_le, 0);
|
305
|
+
rb_define_method(rpm_cDependency, "ge?", rpm_dependency_is_ge, 0);
|
306
|
+
rb_define_method(rpm_cDependency, "satisfy?", rpm_dependency_is_satisfy, 1);
|
307
|
+
rb_define_method(rpm_cDependency, "nametag", rpm_dependency_get_nametag, 0);
|
308
|
+
rb_define_method(rpm_cDependency, "versiontag", rpm_dependency_get_versiontag, 0);
|
309
|
+
rb_define_method(rpm_cDependency, "flagstag", rpm_dependency_get_flagstag, 0);
|
310
|
+
|
311
|
+
rpm_cProvide = rb_define_class_under(rpm_mRPM, "Provide", rpm_cDependency);
|
312
|
+
rb_define_method(rpm_cProvide, "initialize", provide_initialize, 4);
|
313
|
+
rpm_cRequire = rb_define_class_under(rpm_mRPM, "Require", rpm_cDependency);
|
314
|
+
rb_define_method(rpm_cRequire, "initialize", require_initialize, 4);
|
315
|
+
rpm_cConflict = rb_define_class_under(rpm_mRPM, "Conflict", rpm_cDependency);
|
316
|
+
rb_define_method(rpm_cConflict, "initialize", conflict_initialize, 4);
|
317
|
+
rpm_cObsolete = rb_define_class_under(rpm_mRPM, "Obsolete", rpm_cDependency);
|
318
|
+
rb_define_method(rpm_cObsolete, "initialize", obsolete_initialize, 4);
|
319
|
+
|
320
|
+
rb_define_method(rpm_cRequire, "pre?", rpm_require_is_pre, 0);
|
321
|
+
|
322
|
+
id_name = rb_intern("name");
|
323
|
+
id_ver = rb_intern("version");
|
324
|
+
id_flags = rb_intern("flags");
|
325
|
+
id_owner = rb_intern("owner");
|
326
|
+
|
327
|
+
id_nametag = rb_intern("nametag");
|
328
|
+
id_versiontag = rb_intern("versiontag");
|
329
|
+
id_flagstag = rb_intern("flagstag");
|
330
|
+
}
|
data/ext/rpm/extconf.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
### -*- mode: ruby; indent-tabs-mode: nil; -*-
|
2
|
+
### Ruby/RPM
|
3
|
+
###
|
4
|
+
### Copyright (C) 2002 Kenta MURATA <muraken2@nifty.com>.
|
5
|
+
|
6
|
+
### $Id: extconf.rb 19 2004-03-28 10:01:23Z zaki $
|
7
|
+
|
8
|
+
require 'mkmf'
|
9
|
+
|
10
|
+
dir_config('popt')
|
11
|
+
dir_config("rpm", "/usr/include/rpm", "/usr/lib")
|
12
|
+
|
13
|
+
def check_popt
|
14
|
+
if have_header('popt.h') and have_library('popt') then
|
15
|
+
true
|
16
|
+
else
|
17
|
+
STDERR.puts "libpopt not found"
|
18
|
+
false
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def check_db
|
23
|
+
dir_config('db')
|
24
|
+
if have_library("db-4.2","db_version")
|
25
|
+
return true
|
26
|
+
end
|
27
|
+
4.downto(2) do |i|
|
28
|
+
if have_library("db-#{i}.0", "db_version") or
|
29
|
+
have_library("db#{i}", "db_version") then
|
30
|
+
return true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
if have_library("db", "db_version") then
|
34
|
+
true
|
35
|
+
else
|
36
|
+
STDERR.puts "db not found"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def check_rpm
|
41
|
+
return false unless check_db
|
42
|
+
$libs = append_library($libs, 'rpmdb')
|
43
|
+
$libs = append_library($libs, 'rpm')
|
44
|
+
if have_header('rpmlib.h') and
|
45
|
+
have_library('rpmio') and
|
46
|
+
have_library('rpmbuild', 'getBuildTime') then
|
47
|
+
true
|
48
|
+
else
|
49
|
+
STDERR.puts "rpm library not found"
|
50
|
+
false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def check_rpm_version
|
55
|
+
version_string=`LANG=C rpm --version| cut -d' ' -f 3`
|
56
|
+
ver=version_string.split(/\./)
|
57
|
+
# TODO: zaki: strict checking is requires
|
58
|
+
$CFLAGS="#{$CFLAGS} -DRPM_VERSION_CODE=#{(ver[0].to_i<<16) + (ver[1].to_i<<8) + (ver[2].to_i<<0)}"
|
59
|
+
end
|
60
|
+
|
61
|
+
def check_debug
|
62
|
+
if ENV["RUBYRPM_DEBUG"] then
|
63
|
+
puts "debug mode\n"
|
64
|
+
$CFLAGS="#{$CFLAGS} -O0 -g -ggdb"
|
65
|
+
else
|
66
|
+
puts "non-debug mode\n"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
exit unless check_popt
|
71
|
+
exit unless check_rpm
|
72
|
+
exit unless check_rpm_version
|
73
|
+
|
74
|
+
check_debug
|
75
|
+
|
76
|
+
system 'gcc -MM *.c >depend 2>/dev/null'
|
77
|
+
|
78
|
+
create_makefile('rpmmodule')
|
data/ext/rpm/file.c
ADDED
@@ -0,0 +1,281 @@
|
|
1
|
+
/* -*- mode: C; c-basic-offset: 4; tab-width: 4; -*- */
|
2
|
+
/* Ruby/RPM
|
3
|
+
*
|
4
|
+
* Copyright (C) 2002 Kenta MURATA <muraken2@nifty.com>.
|
5
|
+
*/
|
6
|
+
|
7
|
+
/* $Id: file.c 9 2004-03-13 14:19:20Z zaki $ */
|
8
|
+
|
9
|
+
#include "private.h"
|
10
|
+
|
11
|
+
VALUE rpm_cFile;
|
12
|
+
|
13
|
+
static ID id_path;
|
14
|
+
static ID id_md5sum;
|
15
|
+
static ID id_link_to;
|
16
|
+
static ID id_size;
|
17
|
+
static ID id_mtime;
|
18
|
+
static ID id_owner;
|
19
|
+
static ID id_group;
|
20
|
+
static ID id_rdev;
|
21
|
+
static ID id_mode;
|
22
|
+
static ID id_attr;
|
23
|
+
static ID id_state;
|
24
|
+
|
25
|
+
static VALUE
|
26
|
+
file_initialize(VALUE file, VALUE path, VALUE md5sum, VALUE link_to,
|
27
|
+
VALUE size, VALUE mtime, VALUE owner, VALUE group,
|
28
|
+
VALUE rdev, VALUE mode, VALUE attr, VALUE state)
|
29
|
+
{
|
30
|
+
if (TYPE(path) != T_STRING
|
31
|
+
|| TYPE(md5sum) != T_STRING
|
32
|
+
|| (!NIL_P(link_to) && TYPE(link_to) != T_STRING)
|
33
|
+
|| (!NIL_P(owner) && TYPE(owner) != T_STRING)
|
34
|
+
|| (!NIL_P(group) && TYPE(group) != T_STRING)) {
|
35
|
+
rb_raise(rb_eTypeError, "illegal argument type");
|
36
|
+
}
|
37
|
+
rb_ivar_set(file, id_path, path);
|
38
|
+
rb_ivar_set(file, id_md5sum, md5sum);
|
39
|
+
rb_ivar_set(file, id_link_to, (!NIL_P(link_to) && RSTRING(link_to)->len) ? link_to : Qnil);
|
40
|
+
rb_ivar_set(file, id_size, rb_Integer(size));
|
41
|
+
if (rb_obj_is_kind_of(mtime, rb_cTime) == Qfalse) {
|
42
|
+
mtime = rb_time_new(NUM2INT(rb_Integer(mtime)), (time_t)0);
|
43
|
+
}
|
44
|
+
rb_ivar_set(file, id_mtime, mtime);
|
45
|
+
rb_ivar_set(file, id_owner, owner);
|
46
|
+
rb_ivar_set(file, id_group, group);
|
47
|
+
rb_ivar_set(file, id_rdev, rb_Integer(rdev));
|
48
|
+
rb_ivar_set(file, id_mode, UINT2NUM(NUM2UINT(rb_Integer(mode))&0777));
|
49
|
+
rb_ivar_set(file, id_attr, rb_Integer(attr));
|
50
|
+
rb_ivar_set(file, id_state, rb_Integer(state));
|
51
|
+
|
52
|
+
return file;
|
53
|
+
}
|
54
|
+
|
55
|
+
VALUE
|
56
|
+
rpm_file_new(const char* path, const char* md5sum, const char* link_to,
|
57
|
+
size_t size, time_t mtime, const char* owner, const char* group,
|
58
|
+
dev_t rdev, mode_t mode, rpmfileAttrs attr, rpmfileState state)
|
59
|
+
{
|
60
|
+
VALUE file, argv[11];
|
61
|
+
|
62
|
+
argv[0] = rb_str_new2(path);
|
63
|
+
argv[1] = rb_str_new2(md5sum);
|
64
|
+
argv[2] = link_to ? rb_str_new2(link_to) : Qnil;
|
65
|
+
argv[3] = UINT2NUM(size);
|
66
|
+
argv[4] = rb_time_new(mtime, (time_t)0);
|
67
|
+
argv[5] = owner ? rb_str_new2(owner) : Qnil;
|
68
|
+
argv[6] = group ? rb_str_new2(group) : Qnil;
|
69
|
+
argv[7] = UINT2NUM(rdev);
|
70
|
+
argv[8] = UINT2NUM(mode);
|
71
|
+
argv[9] = INT2NUM(attr);
|
72
|
+
argv[10] = INT2NUM(state);
|
73
|
+
|
74
|
+
file = rb_newobj();
|
75
|
+
OBJSETUP(file, rpm_cFile, T_OBJECT);
|
76
|
+
rb_obj_call_init(file, 11, argv);
|
77
|
+
|
78
|
+
return file;
|
79
|
+
}
|
80
|
+
|
81
|
+
VALUE
|
82
|
+
rpm_file_get_path(VALUE file)
|
83
|
+
{
|
84
|
+
return rb_ivar_get(file, id_path);
|
85
|
+
}
|
86
|
+
|
87
|
+
VALUE
|
88
|
+
rpm_file_get_md5sum(VALUE file)
|
89
|
+
{
|
90
|
+
return rb_ivar_get(file, id_md5sum);
|
91
|
+
}
|
92
|
+
|
93
|
+
VALUE
|
94
|
+
rpm_file_get_link_to(VALUE file)
|
95
|
+
{
|
96
|
+
return rb_ivar_get(file, id_link_to);
|
97
|
+
}
|
98
|
+
|
99
|
+
VALUE
|
100
|
+
rpm_file_get_size(VALUE file)
|
101
|
+
{
|
102
|
+
return rb_ivar_get(file, id_size);
|
103
|
+
}
|
104
|
+
|
105
|
+
VALUE
|
106
|
+
rpm_file_get_mtime(VALUE file)
|
107
|
+
{
|
108
|
+
return rb_ivar_get(file, id_mtime);
|
109
|
+
}
|
110
|
+
|
111
|
+
VALUE
|
112
|
+
rpm_file_get_owner(VALUE file)
|
113
|
+
{
|
114
|
+
return rb_ivar_get(file, id_owner);
|
115
|
+
}
|
116
|
+
|
117
|
+
VALUE
|
118
|
+
rpm_file_get_group(VALUE file)
|
119
|
+
{
|
120
|
+
return rb_ivar_get(file, id_group);
|
121
|
+
}
|
122
|
+
|
123
|
+
VALUE
|
124
|
+
rpm_file_get_rdev(VALUE file)
|
125
|
+
{
|
126
|
+
return rb_ivar_get(file, id_rdev);
|
127
|
+
}
|
128
|
+
|
129
|
+
VALUE
|
130
|
+
rpm_file_get_mode(VALUE file)
|
131
|
+
{
|
132
|
+
return rb_ivar_get(file, id_mode);
|
133
|
+
}
|
134
|
+
|
135
|
+
VALUE
|
136
|
+
rpm_file_get_attr(VALUE file)
|
137
|
+
{
|
138
|
+
return rb_ivar_get(file, id_attr);
|
139
|
+
}
|
140
|
+
|
141
|
+
VALUE
|
142
|
+
rpm_file_get_state(VALUE file)
|
143
|
+
{
|
144
|
+
return rb_ivar_get(file, id_state);
|
145
|
+
}
|
146
|
+
|
147
|
+
VALUE
|
148
|
+
rpm_file_is_symlink(VALUE file)
|
149
|
+
{
|
150
|
+
return NIL_P(rb_ivar_get(file, id_link_to)) ? Qfalse : Qtrue;
|
151
|
+
}
|
152
|
+
|
153
|
+
VALUE
|
154
|
+
rpm_file_is_config(VALUE file)
|
155
|
+
{
|
156
|
+
return (NUM2INT(rb_ivar_get(file, id_attr)) & RPMFILE_CONFIG) ? Qtrue : Qfalse;
|
157
|
+
}
|
158
|
+
|
159
|
+
VALUE
|
160
|
+
rpm_file_is_doc(VALUE file)
|
161
|
+
{
|
162
|
+
return (NUM2INT(rb_ivar_get(file, id_attr)) & RPMFILE_DOC) ? Qtrue : Qfalse;
|
163
|
+
}
|
164
|
+
|
165
|
+
VALUE
|
166
|
+
rpm_file_is_donotuse(VALUE file)
|
167
|
+
{
|
168
|
+
#if RPM_VERSION_CODE < RPM_VERSION(4,1,0)
|
169
|
+
return (NUM2INT(rb_ivar_get(file, id_attr)) & RPMFILE_DONOTUSE) ? Qtrue : Qfalse;
|
170
|
+
#else
|
171
|
+
return Qfalse;
|
172
|
+
#endif
|
173
|
+
}
|
174
|
+
|
175
|
+
VALUE
|
176
|
+
rpm_file_is_missingok(VALUE file)
|
177
|
+
{
|
178
|
+
return (NUM2INT(rb_ivar_get(file, id_attr)) & RPMFILE_MISSINGOK) ? Qtrue : Qfalse;
|
179
|
+
}
|
180
|
+
|
181
|
+
VALUE
|
182
|
+
rpm_file_is_noreplace(VALUE file)
|
183
|
+
{
|
184
|
+
return (NUM2INT(rb_ivar_get(file, id_attr)) & RPMFILE_NOREPLACE) ? Qtrue : Qfalse;
|
185
|
+
}
|
186
|
+
|
187
|
+
VALUE
|
188
|
+
rpm_file_is_specfile(VALUE file)
|
189
|
+
{
|
190
|
+
return (NUM2INT(rb_ivar_get(file, id_attr)) & RPMFILE_SPECFILE) ? Qtrue : Qfalse;
|
191
|
+
}
|
192
|
+
|
193
|
+
VALUE
|
194
|
+
rpm_file_is_ghost(VALUE file)
|
195
|
+
{
|
196
|
+
return (NUM2INT(rb_ivar_get(file, id_attr)) & RPMFILE_GHOST) ? Qtrue : Qfalse;
|
197
|
+
}
|
198
|
+
|
199
|
+
VALUE
|
200
|
+
rpm_file_is_license(VALUE file)
|
201
|
+
{
|
202
|
+
return (NUM2INT(rb_ivar_get(file, id_attr)) & RPMFILE_LICENSE) ? Qtrue : Qfalse;
|
203
|
+
}
|
204
|
+
|
205
|
+
VALUE
|
206
|
+
rpm_file_is_readme(VALUE file)
|
207
|
+
{
|
208
|
+
return (NUM2INT(rb_ivar_get(file, id_attr)) & RPMFILE_README) ? Qtrue : Qfalse;
|
209
|
+
}
|
210
|
+
|
211
|
+
VALUE
|
212
|
+
rpm_file_is_exclude(VALUE file)
|
213
|
+
{
|
214
|
+
return (NUM2INT(rb_ivar_get(file, id_attr)) & RPMFILE_EXCLUDE) ? Qtrue : Qfalse;
|
215
|
+
}
|
216
|
+
|
217
|
+
VALUE
|
218
|
+
rpm_file_is_replaced(VALUE file)
|
219
|
+
{
|
220
|
+
return (NUM2INT(rb_ivar_get(file, id_state))
|
221
|
+
== RPMFILE_STATE_REPLACED) ? Qtrue : Qfalse;
|
222
|
+
}
|
223
|
+
|
224
|
+
VALUE
|
225
|
+
rpm_file_is_notinstalled(VALUE file)
|
226
|
+
{
|
227
|
+
return (NUM2INT(rb_ivar_get(file, id_state))
|
228
|
+
== RPMFILE_STATE_NOTINSTALLED) ? Qtrue : Qfalse;
|
229
|
+
}
|
230
|
+
|
231
|
+
VALUE
|
232
|
+
rpm_file_is_netshared(VALUE file)
|
233
|
+
{
|
234
|
+
return (NUM2INT(rb_ivar_get(file, id_state))
|
235
|
+
== RPMFILE_STATE_NETSHARED) ? Qtrue : Qfalse;
|
236
|
+
}
|
237
|
+
|
238
|
+
void
|
239
|
+
Init_rpm_file(void)
|
240
|
+
{
|
241
|
+
rpm_cFile = rb_define_class_under(rpm_mRPM, "File", rb_cObject);
|
242
|
+
rb_define_method(rpm_cFile, "initialize", file_initialize, 11);
|
243
|
+
rb_define_method(rpm_cFile, "path", rpm_file_get_path, 0);
|
244
|
+
rb_define_alias(rpm_cFile, "to_s", "path");
|
245
|
+
rb_define_method(rpm_cFile, "md5sum", rpm_file_get_md5sum, 0);
|
246
|
+
rb_define_method(rpm_cFile, "link_to", rpm_file_get_link_to, 0);
|
247
|
+
rb_define_method(rpm_cFile, "size", rpm_file_get_size, 0);
|
248
|
+
rb_define_method(rpm_cFile, "mtime", rpm_file_get_mtime, 0);
|
249
|
+
rb_define_method(rpm_cFile, "owner", rpm_file_get_owner, 0);
|
250
|
+
rb_define_method(rpm_cFile, "group", rpm_file_get_group, 0);
|
251
|
+
rb_define_method(rpm_cFile, "rdev", rpm_file_get_rdev, 0);
|
252
|
+
rb_define_method(rpm_cFile, "mode", rpm_file_get_mode, 0);
|
253
|
+
rb_define_method(rpm_cFile, "attr", rpm_file_get_attr, 0);
|
254
|
+
rb_define_method(rpm_cFile, "state", rpm_file_get_state, 0);
|
255
|
+
rb_define_method(rpm_cFile, "symlink?", rpm_file_is_symlink, 0);
|
256
|
+
rb_define_method(rpm_cFile, "config?", rpm_file_is_config, 0);
|
257
|
+
rb_define_method(rpm_cFile, "doc?", rpm_file_is_doc, 0);
|
258
|
+
rb_define_method(rpm_cFile, "donotuse?", rpm_file_is_donotuse, 0);
|
259
|
+
rb_define_method(rpm_cFile, "missingok?", rpm_file_is_missingok, 0);
|
260
|
+
rb_define_method(rpm_cFile, "noreplace?", rpm_file_is_noreplace, 0);
|
261
|
+
rb_define_method(rpm_cFile, "specfile?", rpm_file_is_specfile, 0);
|
262
|
+
rb_define_method(rpm_cFile, "ghost?", rpm_file_is_ghost, 0);
|
263
|
+
rb_define_method(rpm_cFile, "license?", rpm_file_is_license, 0);
|
264
|
+
rb_define_method(rpm_cFile, "readme?", rpm_file_is_readme, 0);
|
265
|
+
rb_define_method(rpm_cFile, "exclude?", rpm_file_is_exclude, 0);
|
266
|
+
rb_define_method(rpm_cFile, "replaced?", rpm_file_is_replaced, 0);
|
267
|
+
rb_define_method(rpm_cFile, "notinstalled?", rpm_file_is_notinstalled, 0);
|
268
|
+
rb_define_method(rpm_cFile, "netshared?", rpm_file_is_netshared, 0);
|
269
|
+
|
270
|
+
id_path = rb_intern("path");
|
271
|
+
id_md5sum = rb_intern("md5sum");
|
272
|
+
id_link_to = rb_intern("link_to");
|
273
|
+
id_size = rb_intern("size");
|
274
|
+
id_mtime = rb_intern("mtime");
|
275
|
+
id_owner = rb_intern("owner");
|
276
|
+
id_group = rb_intern("group");
|
277
|
+
id_rdev = rb_intern("rdev");
|
278
|
+
id_mode = rb_intern("mode");
|
279
|
+
id_attr = rb_intern("attr");
|
280
|
+
id_state = rb_intern("state");
|
281
|
+
}
|