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