Class: RPM::Package

Inherits:
Object
  • Object
show all
Defined in:
ext/rpm/package.c

Class Method Summary (collapse)

Instance Method Summary (collapse)

Class Method Details

+ (Object) clear_cache

+ (Package) create

Creates a new package object

Parameters:

  • name (String)

    Package name

  • version (Version)

    Package version

Returns:



# File 'ext/rpm/package.c'

static VALUE
package_s_create(VALUE klass, VALUE name, VALUE version)
{
Header hdr;
VALUE pkg;

if ((TYPE(name) != T_STRING) || (
         rb_obj_is_kind_of(version, rpm_cVersion) == Qfalse))  {
    rb_raise(rb_eTypeError, "illegal argument type");
}

+ (Package) load

Create a new package object from data

Parameters:

  • str (String)

    Header data

Returns:



# File 'ext/rpm/package.c'

static VALUE
package_s_load(VALUE klass, VALUE str)
{
VALUE pkg, temp;
Header hdr;
FD_t fd;

Check_Type(str, T_STRING);

temp = ruby_rpm_make_temp_name();
fd = Fopen(RSTRING_PTR((temp)), "wb+");
Fwrite(RSTRING_PTR((str)), RSTRING_LEN(str), 1, fd);
Fseek(fd, 0, SEEK_SET);
hdr = headerRead(fd, HEADER_MAGIC_YES);
Fclose(fd);
unlink(RSTRING_PTR((temp)));

if (!hdr) {
    rb_raise(rb_eArgError, "unable load RPM::Package");
}

+ (Package) new

Creates a Package object from a rpm located on disk

Examples:

pkg = RPM::Package.open('/home/foo/myprogram-1.0-x86_64.rpm')
pkg.name => 'myprogram'
pkg.version => '1.0'

Parameters:

  • filename (String)

    Path to filename

Returns:



# File 'ext/rpm/package.c'

static VALUE
package_s_open(VALUE klass, VALUE filename)
{
VALUE pkg = Qnil;
FD_t fd;
Header hdr;
rpmRC rc;

if (TYPE(filename) != T_STRING) {
    rb_raise(rb_eTypeError, "illegal argument type");
}

+ (Package) open

Creates a Package object from a rpm located on disk

Examples:

pkg = RPM::Package.open('/home/foo/myprogram-1.0-x86_64.rpm')
pkg.name => 'myprogram'
pkg.version => '1.0'

Parameters:

  • filename (String)

    Path to filename

Returns:



# File 'ext/rpm/package.c'

static VALUE
package_s_open(VALUE klass, VALUE filename)
{
VALUE pkg = Qnil;
FD_t fd;
Header hdr;
rpmRC rc;

if (TYPE(filename) != T_STRING) {
    rb_raise(rb_eTypeError, "illegal argument type");
}

+ (Object) use_cache=

Instance Method Details

- (Object) []

Access a header entry

Examples:

pkg => #<RPM::Package name="xmlgraphics-fop", version=#<RPM::Version v="1.0", r="22.4">>
pkg[RPM::TAG_NAME] => "xmlgraphics-fop"

Parameters:

  • tag (Number)

    Tag to return

Returns:

  • Value of the entry



# File 'ext/rpm/package.c'

VALUE
rpm_package_aref(VALUE pkg, VALUE tag)
{
#if RPM_VERSION_CODE < RPM_VERSION(4,6,0) || RPM_VERSION_CODE >= RPM_VERSION(5,0,0)
rpmTag tagval = NUM2INT(tag);
VALUE val = Qnil;
void* data;
rpmTagType type;
int_32 count;
register int i;
int ary_p = 0;
int i18n_p = 0;

if (!headerGetEntryMinMemory(RPM_HEADER(pkg), tagval, (hTYP_t)&type,
                                 (hPTR_t*)&data, (hCNT_t)&count)) {
    goto leave;
}

- (Object) _dump

- (Object) add_binary

Add a binary value to the package header

Parameters:

  • tag (Number)

    Tag

  • val (String)

    Value



# File 'ext/rpm/package.c'

VALUE
rpm_package_add_binary(VALUE pkg,VALUE tag,VALUE val)
{
if ((TYPE(val) != T_STRING))  {
    rb_raise(rb_eTypeError, "illegal argument type");
}

- (Object) add_dependency

Add a dependency to the package header

Parameters:



# File 'ext/rpm/package.c'

VALUE
rpm_package_add_dependency(VALUE pkg,VALUE dep)
{
int nametag;
int versiontag;
int flagstag;
char* name;
char* evr;
int flag;

if ( rb_obj_is_kind_of(dep, rpm_cDependency) == Qfalse )  {
    rb_raise(rb_eTypeError, "illegal argument type");
}

- (Object) add_int32

Add a int32 value to the package header

Parameters:

  • tag (Number)

    Tag

  • val (Number)

    Value



# File 'ext/rpm/package.c'

VALUE
rpm_package_add_int32(VALUE pkg,VALUE tag,VALUE val)
{
int_32 v;
if (TYPE(val) == T_FIXNUM) {
    v = (int_32) FIX2LONG(val);
}

- (Object) add_string

Add a binary value to the package header

Parameters:

  • tag (Number)

    Tag

  • val (String)

    String to add



# File 'ext/rpm/package.c'

VALUE
rpm_package_add_string(VALUE pkg,VALUE tag,VALUE val)
{
if ((TYPE(val) != T_STRING))  {
    rb_raise(rb_eTypeError, "illegal argument type");
}

- (Object) add_string_array

Add a list of strings to the package header

Parameters:

  • tag (Number)

    Tag

  • val (Array<String>)

    Strings to add



# File 'ext/rpm/package.c'

VALUE
rpm_package_add_string_array(VALUE pkg,VALUE tag,VALUE val)
{
if ((TYPE(val) != T_STRING))  {
    rb_raise(rb_eTypeError, "illegal argument type");
}

- (String) arch

This package architecture

Returns:

  • (String)

    This package architecture



# File 'ext/rpm/package.c'

VALUE
rpm_package_get_arch(VALUE pkg)
{
    VALUE arch;
    const char* a;
    headerNEVRA(RPM_HEADER(pkg), NULL, NULL, NULL, NULL, &a);
    arch = a ? rb_str_new2(a) : Qnil;

    return arch;
}

- (Array<RPM::Changelog>) changelog

Changelog of the package as an array of entries

Returns:

  • (Array<RPM::Changelog>)

    changelog of the package as an array of entries



# File 'ext/rpm/package.c'

VALUE
rpm_package_get_changelog(VALUE pkg)
{
#if RPM_VERSION_CODE < RPM_VERSION(4,6,0) || RPM_VERSION_CODE >= RPM_VERSION(5,0,0)
VALUE cl;
register int i;

char **times,**names,**texts;
rpmTagType timetype,nametype,texttype;
int_32 count;

cl = rb_ary_new();

if (!headerGetEntryMinMemory(RPM_HEADER(pkg), RPMTAG_CHANGELOGTIME, (hTYP_t)&timetype,
                     (hPTR_t*)&times, (hCNT_t)&count)) {
    return cl;
}

- (Array<RPM::Conflict>) conflicts

Conflict list for this package

Returns:



# File 'ext/rpm/package.c'

VALUE
rpm_package_get_conflicts(VALUE pkg)
{
    return rpm_package_get_dependency(pkg,RPMTAG_CONFLICTNAME,RPMTAG_CONFLICTVERSION,RPMTAG_CONFLICTFLAGS,rpm_conflict_new);
}

- (Object) copy_to

- (Object) delete_tag

Deletes a tag of the package header

Parameters:

  • tag (Number)

    Tag



# File 'ext/rpm/package.c'

VALUE
rpm_package_delete_tag(VALUE pkg, VALUE tag)
{
    rpmTag tagval = NUM2INT(tag);
    VALUE val;

    val = rpm_package_aref(pkg, tag);
    headerRemoveEntry(RPM_HEADER(pkg), tagval);
    return val;
}

- (Object) dump

- (Array<RPM::File>) files

File list for this package

Returns:

  • (Array<RPM::File>)

    File list for this package



# File 'ext/rpm/package.c'

VALUE
rpm_package_get_files(VALUE pkg)
{
    VALUE files;
    VALUE basenames = rpm_package_aref(pkg, INT2NUM(RPMTAG_BASENAMES));
    VALUE dirnames = rpm_package_aref(pkg, INT2NUM(RPMTAG_DIRNAMES));
    VALUE diridxs = rpm_package_aref(pkg, INT2NUM(RPMTAG_DIRINDEXES));
    VALUE statelist = rpm_package_aref(pkg, INT2NUM(RPMTAG_FILESTATES));
    VALUE flaglist = rpm_package_aref(pkg, INT2NUM(RPMTAG_FILEFLAGS));
    VALUE sizelist = rpm_package_aref(pkg, INT2NUM(RPMTAG_FILESIZES));
    VALUE modelist = rpm_package_aref(pkg, INT2NUM(RPMTAG_FILEMODES));
    VALUE mtimelist = rpm_package_aref(pkg, INT2NUM(RPMTAG_FILEMTIMES));
    VALUE rdevlist = rpm_package_aref(pkg, INT2NUM(RPMTAG_FILERDEVS));
    VALUE linklist = rpm_package_aref(pkg, INT2NUM(RPMTAG_FILELINKTOS));
    VALUE md5list = rpm_package_aref(pkg, INT2NUM(RPMTAG_FILEMD5S));
    VALUE ownerlist = rpm_package_aref(pkg, INT2NUM(RPMTAG_FILEUSERNAME));
    VALUE grouplist = rpm_package_aref(pkg, INT2NUM(RPMTAG_FILEGROUPNAME));
    register int i;

    files = rb_ary_new();
    if (!NIL_P(basenames)) {
for (i = 0; i < RARRAY_LEN(basenames); i++) {
    static char buf[BUFSIZ];
    VALUE file;
    buf[0] = '\0';
    stpcpy(stpcpy(buf, RSTRING_PTR((RARRAY_PTR(dirnames))[
                   NUM2INT(RARRAY_PTR(diridxs)[i])])),
               RSTRING_PTR((RARRAY_PTR(basenames)[i])));
    file = rpm_file_new(
        buf,
        RSTRING_PTR((RARRAY_PTR(md5list)[i])),
        (NIL_P(linklist)
         ? NULL
         : RSTRING_PTR((RARRAY_PTR(linklist)[i]))),
        NUM2UINT(RARRAY_PTR(sizelist)[i]),
        NUM2INT(RARRAY_PTR(mtimelist)[i]),
        (NIL_P(ownerlist)
         ? NULL
         : RSTRING_PTR((RARRAY_PTR(ownerlist)[i]))),
        (NIL_P(grouplist)
         ? NULL
         : RSTRING_PTR((RARRAY_PTR(grouplist)[i]))),
        NUM2UINT(RARRAY_PTR(rdevlist)[i]),
        NUM2UINT(RARRAY_PTR(modelist)[i]),
        (NIL_P(flaglist)
         ? RPMFILE_NONE
         : NUM2INT(RARRAY_PTR(flaglist)[i])),
        (NIL_P(statelist)
         ? RPMFILE_STATE_NORMAL
         : NUM2INT(RARRAY_PTR(statelist)[i])));
    rb_ary_push(files, file);
}

- (Object) inspect

- (String) name

This package name

Returns:

  • (String)

    This package name



# File 'ext/rpm/package.c'

VALUE
rpm_package_get_name(VALUE pkg)
{
    VALUE name;
    const char* n;
    headerNVR(RPM_HEADER(pkg), &n, NULL, NULL);
    name = n ? rb_str_new2(n) : Qnil;

    return name;
}

- (Array<RPM::Obsolete>) obsoletes

Obsoletes list for this package

Returns:



# File 'ext/rpm/package.c'

VALUE
rpm_package_get_obsoletes(VALUE pkg)
{
    return rpm_package_get_dependency(pkg,RPMTAG_OBSOLETENAME,RPMTAG_OBSOLETEVERSION,RPMTAG_OBSOLETEFLAGS,rpm_obsolete_new);
}

- (Array<RPM::Provide>) provides

Provides list for this package

Returns:



# File 'ext/rpm/package.c'

VALUE
rpm_package_get_provides(VALUE pkg)
{
    return rpm_package_get_dependency(pkg,RPMTAG_PROVIDENAME,RPMTAG_PROVIDEVERSION,RPMTAG_PROVIDEFLAGS,rpm_provide_new);
}

- (Array<RPM::Require>) requires

Require list for this package

Returns:



# File 'ext/rpm/package.c'

VALUE
rpm_package_get_requires(VALUE pkg)
{
    return rpm_package_get_dependency(pkg,RPMTAG_REQUIRENAME,RPMTAG_REQUIREVERSION,RPMTAG_REQUIREFLAGS,rpm_require_new);
}

- (Number) signature

This package signature

Returns:

  • (Number)

    This package signature



# File 'ext/rpm/package.c'

VALUE
rpm_package_get_signature(VALUE pkg)
{
    VALUE signature = rb_ivar_get(pkg, id_signature);

    if (NIL_P(signature)) {
    char *sigmd5;
sigmd5 = headerSprintf(RPM_HEADER(pkg),"%{sigmd5}

- (Object) sprintf

- (String) to_s

String representation of the package: "name-version-release-arch"

Returns:

  • (String)


# File 'ext/rpm/package.c'

VALUE
rpm_package_to_s(VALUE pkg)
{
char buf[BUFSIZ];
VALUE name = rpm_package_get_name(pkg);
VALUE ver  = rpm_package_get_version(pkg);
VALUE arch = rpm_package_get_arch(pkg);

if (NIL_P(name)) {
    buf[0] = '\0';
}

- (Version) version

Version for this package

Returns:

  • (Version)

    Version for this package



# File 'ext/rpm/package.c'

VALUE
rpm_package_get_version(VALUE pkg)
{
VALUE ver;
const char* v;
const char* r;
VALUE e;

headerNVR(RPM_HEADER(pkg), NULL, &v, &r);
if (!v) {
    ver = Qnil;
}