RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Olivier Thauvin
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
  Module: rpm                              Date:   04-Aug-2007 23:25:44
  Branch: HEAD                             Handle: 2007080422254201

  Added files:
    rpm/perl/RPM            Header.pm
    rpm/perl/t              03.header.t
  Modified files:
    rpm/perl                Makefile.PL.in Makefile.am RPM.xs RPM_Header.xs
                            typemap

  Log:
    - integrate RPM::Header into perl module

  Summary:
    Revision    Changes     Path
    1.10        +1  -1      rpm/perl/Makefile.PL.in
    1.9         +7  -3      rpm/perl/Makefile.am
    1.16        +1  -0      rpm/perl/RPM.xs
    1.1         +16 -0      rpm/perl/RPM/Header.pm
    1.2         +48 -3      rpm/perl/RPM_Header.xs
    1.1         +28 -0      rpm/perl/t/03.header.t
    1.6         +1  -1      rpm/perl/typemap
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/perl/Makefile.PL.in
  ============================================================================
  $ cvs diff -u -r1.9 -r1.10 Makefile.PL.in
  --- rpm/perl/Makefile.PL.in   4 Aug 2007 16:36:41 -0000       1.9
  +++ rpm/perl/Makefile.PL.in   4 Aug 2007 21:25:42 -0000       1.10
  @@ -9,7 +9,7 @@
   
   WriteMakefile(
              'NAME'    => 'RPM',
  -           'OBJECT'  => 'RPM.o RPM_Ts.o RPM_Header.o RPM_Constant.o',
  +           'OBJECT'  => 'rpmxs.o RPM.o RPM_Ts.o RPM_Header.o RPM_Constant.o',
              'VERSION' => '@VERSION@',
              'MAKEFILE'=> 'Makefile.perl',
              'LIBS'    => [join(' ', @ldaddp) . ' ' . join(' ', @ldadd) . ' 
@LDFLAGS@ @LIBS@'],
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/perl/Makefile.am
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 Makefile.am
  --- rpm/perl/Makefile.am      4 Aug 2007 16:36:41 -0000       1.8
  +++ rpm/perl/Makefile.am      4 Aug 2007 21:25:42 -0000       1.9
  @@ -4,10 +4,14 @@
   
   EXTRA_DIST = \
        MANIFEST \
  +     typemap \
        Makefile.PL.in \
  -     RPM.xs RPM.pm t/01.rpm.t\
  -     RPM_Header.xs RPM_Ts.xs \
  -     RPM/Constant.pm RPM_Constant.xs t/02.rpmconstant.t
  +     rpmxs.c rpmxs.h \
  +     RPM.xs RPM.pm t/01.rpm.t \
  +     RPM/Constant.pm RPM_Constant.xs t/02.rpmconstant.t \
  +     RPM_Header.xs RPM/Header.pm t/03.header.t \
  +     RPM_Ts.xs \
  +     hdlist-test.hdr
   
   noinst_DATA = .made_mod
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/perl/RPM.xs
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 RPM.xs
  --- rpm/perl/RPM.xs   4 Aug 2007 16:36:41 -0000       1.15
  +++ rpm/perl/RPM.xs   4 Aug 2007 21:25:42 -0000       1.16
  @@ -46,6 +46,7 @@
   
   BOOT:
       crutch_stack_wrap(boot_RPM__Constant(aTHX_ cv));
  +    crutch_stack_wrap(boot_RPM__Header(aTHX_ cv));
   #if DYING
       {
        HV *header_tags, *constants; */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/perl/RPM/Header.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 Header.pm
  --- /dev/null 2007-08-04 23:22:01 +0200
  +++ Header.pm 2007-08-04 23:25:43 +0200
  @@ -0,0 +1,16 @@
  +package RPM::Header;
  +
  +use strict;
  +use Exporter;
  +use RPM;
  +
  +our @ISA = qw(Exporter);
  +
  +our @EXPORT = qw(
  +    stream2header
  +    rpm2header
  +);
  +
  +1;
  +
  +__END__
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/perl/RPM_Header.xs
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 RPM_Header.xs
  --- rpm/perl/RPM_Header.xs    27 Jul 2007 22:31:12 -0000      1.1
  +++ rpm/perl/RPM_Header.xs    4 Aug 2007 21:25:42 -0000       1.2
  @@ -6,11 +6,9 @@
   #undef Mkdir
   #undef Stat
   
  -#if #DYING
   #include <stdio.h>
   #include <string.h>
   #include <utime.h>
  -#endif
   #include "rpmlib.h"
   #include <rpmio.h>
   #include "rpmcli.h"
  @@ -22,6 +20,7 @@
   #include "rpmdb.h"
   #include "misc.h"
   
  +#include "rpmxs.h"
   
   void
   _populate_header_tags(HV *href)
  @@ -33,11 +32,57 @@
       }
   }
   
  -MODULE = RPM_Header          PACKAGE = RPM::Header
  +MODULE = RPM::Header         PACKAGE = RPM::Header
   
   PROTOTYPES: ENABLE
   
   void
  +stream2header(fp, callback = NULL)
  +    FILE *fp
  +    SV * callback
  +    PREINIT:
  +    FD_t fd = NULL;
  +    Header header;
  +    PPCODE:
  +    if (fp && (fd = fdDup(fileno(fp)))) {
  +        while ((header = headerRead(fd))) {
  +            if (callback != NULL && SvROK(callback)) {
  +                ENTER;
  +                SAVETMPS;
  +                PUSHMARK(SP);
  +                XPUSHs(sv_2mortal(sv_setref_pv(newSVpv("", 0), 
"RPM::Header", (void *)header)));
  +                PUTBACK;
  +                call_sv(callback, G_DISCARD | G_SCALAR);
  +                SPAGAIN;
  +                FREETMPS;
  +                LEAVE;
  +            } else {
  +                XPUSHs(sv_2mortal(sv_setref_pv(newSVpv("", 0), 
"RPM::Header", (void *)header)));
  +            }
  +        }
  +        Fclose(fd);
  +    }
  +
  +# Read a rpm and return a Header
  +# Return undef if failed
  +void
  +rpm2header(filename, sv_vsflags = NULL)
  +    char * filename
  +    SV * sv_vsflags
  +    PREINIT:
  +    rpmts ts = rpmtsCreate();
  +    rpmVSFlags vsflags = RPMVSF_DEFAULT; 
  +    PPCODE:
  +    if (sv_vsflags == NULL) /* Nothing has been passed, default is no 
signature */
  +        vsflags |= _RPMVSF_NOSIGNATURES;
  +    else
  +        vsflags = sv2constant(sv_vsflags, "rpmvsflags");
  +    rpmtsSetVSFlags(ts, vsflags);
  +    _rpm2header(ts, filename, 0);
  +    SPAGAIN;
  +    ts = rpmtsFree(ts);
  +
  +void
   DESTROY(h)
        Header h
       CODE:
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/perl/t/03.header.t
  ============================================================================
  $ cvs diff -u -r0 -r1.1 03.header.t
  --- /dev/null 2007-08-04 23:22:01 +0200
  +++ 03.header.t       2007-08-04 23:25:44 +0200
  @@ -0,0 +1,28 @@
  +#!/bin/env perl
  +
  +use strict;
  +use Test::More tests => 5;
  +
  +use_ok('RPM::Header');
  +can_ok('RPM::Header',
  +    qw(
  +    stream2header
  +    rpm2header
  +    )
  +);
  +
  +{
  +    open(my $fd, '<', 'hdlist-test.hdr') or die "Can open test file 
hdlist-test.hdr";
  +    my ($header) = stream2header($fd);
  +    isa_ok($header, 'RPM::Header');
  +}
  +{
  +    my $header;
  +    open(my $fd, '<', 'hdlist-test.hdr') or die "Can open test file 
hdlist-test.hdr";
  +    stream2header($fd, sub { $header = $_[0] });
  +    isa_ok($header, 'RPM::Header');
  +}
  +{
  +    my $header = rpm2header("test-rpm-1.0-1.noarch.rpm");
  +    isa_ok($header, 'RPM::Header');
  +}
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/perl/typemap
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 typemap
  --- rpm/perl/typemap  25 May 2007 17:36:08 -0000      1.5
  +++ rpm/perl/typemap  4 Aug 2007 21:25:42 -0000       1.6
  @@ -45,6 +45,6 @@
   O_OBJECT_rpmmi
           sv_setref_pv( $arg, "RPM::C::PackageIterator", (void*)$var );
   O_OBJECT_header
  -        sv_setref_pv( $arg, "RPM::C::Header", (void*)$var );
  +        sv_setref_pv( $arg, "RPM::Header", (void*)$var );
   O_OBJECT_rpmts
           sv_setref_pv( $arg, "RPM::C::Transaction", (void*)$var );
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to