The day before a pre-announced monthly release you've decided
to add GPG functionality on the rpm-5_3 branch?!?

Get a grip pal -- we've been here before ...

        blueprint -> discussion -> milestone -> timeline -> release

It is in fact _SIMPLER_ and _FASTER_ to follow procedures
than to do the pooper-scoopering for puppies like you.

Yes I realize you're excited ... and the dog ate your homework ... 

73 de Jeff


On Nov 29, 2010, at 5:04 PM, Per Øyvind Karlsen wrote:

>  RPM Package Manager, CVS Repository
>  http://rpm5.org/cvs/
>  ____________________________________________________________________________
> 
>  Server: rpm5.org                         Name:   Per Øyvind Karlsen
>  Root:   /v/rpm/cvs                       Email:  pkarl...@rpm5.org
>  Module: rpm                              Date:   29-Nov-2010 23:04:18
>  Branch: rpm-5_3                          Handle: 2010112922041602
> 
>  Added files:              (Branch: rpm-5_3)
>    rpm/perl/RPM            Sign.pm
>    rpm/perl/t/gnupg        passphrase pubring.gpg random_seed secring.gpg
>                            test-key.gpg trustdb.gpg
>  Modified files:           (Branch: rpm-5_3)
>    rpm                     CHANGES
>    rpm/perl                Makefile.am RPM.pm RPM.xs RPM_Transaction.xs
>    rpm/perl/RPM            Transaction.pm
> 
>  Log:
>    perl: start on adding back some missing functionality from RPM4:
>            RPM::Sign, RPM::Transaction::importpubkey, 
> RPM::Transaction::checkrpm.
> 
>  Summary:
>    Revision    Changes     Path
>    1.3296.2.124+2  -0      rpm/CHANGES
>    1.20.2.1    +3  -0      rpm/perl/Makefile.am
>    1.9.4.1     +3  -0      rpm/perl/RPM.pm
>    1.32.2.1    +16 -0      rpm/perl/RPM.xs
>    1.1.2.2     +204 -0     rpm/perl/RPM/Sign.pm
>    1.6.8.1     +8  -0      rpm/perl/RPM/Transaction.pm
>    1.17.4.2    +45 -0      rpm/perl/RPM_Transaction.xs
>    1.1.2.2     +6  -0      rpm/perl/t/gnupg/passphrase
>    1.1.2.2     BLOB        rpm/perl/t/gnupg/pubring.gpg
>    1.1.2.2     BLOB        rpm/perl/t/gnupg/random_seed
>    1.1.2.2     BLOB        rpm/perl/t/gnupg/secring.gpg
>    1.1.2.2     +26 -0      rpm/perl/t/gnupg/test-key.gpg
>    1.1.2.2     BLOB        rpm/perl/t/gnupg/trustdb.gpg
>  ____________________________________________________________________________
> 
>  patch -p0 <<'@@ .'
>  Index: rpm/CHANGES
>  ============================================================================
>  $ cvs diff -u -r1.3296.2.123 -r1.3296.2.124 CHANGES
>  --- rpm/CHANGES      25 Nov 2010 21:29:41 -0000      1.3296.2.123
>  +++ rpm/CHANGES      29 Nov 2010 22:04:16 -0000      1.3296.2.124
>  @@ -1,4 +1,6 @@
>   5.3.5 -> 5.3.6:
>  +    - proyvind: perl: start on adding back some missing functionality from 
> RPM4:
>  +        RPM::Sign, RPM::Transaction::importpubkey, 
> RPM::Transaction::checkrpm.
>       - jbj: rpmdb: minimalistic lock object scaling.
>       - jbj: rpmdb: re-open with DB_RECOVER iff DB_RUNRECOVERY.
>       - proyvind: add a first prototype scripts/dbconvert.sh for handling 
> rpmdb
>  @@ .
>  patch -p0 <<'@@ .'
>  Index: rpm/perl/Makefile.am
>  ============================================================================
>  $ cvs diff -u -r1.20 -r1.20.2.1 Makefile.am
>  --- rpm/perl/Makefile.am     31 Dec 2009 14:46:45 -0000      1.20
>  +++ rpm/perl/Makefile.am     29 Nov 2010 22:04:17 -0000      1.20.2.1
>  @@ -15,7 +15,10 @@
>       RPM_Files.xs RPM/Files.pm t/07.files.t \
>       RPM_Dependencies.xs RPM/Dependencies.pm t/08.dependencies.t \
>       RPM_Spec.xs RPM/Spec.pm t/09.spec.t \
>  +    RPM/RPM_Sign.pm t/10.sign.t
>       t/00.pod.coverage.t t/00.pod.t \
>  +    t/gnupg/passphrase t/gnupg/pubring.gpg t/gnupg/random_seed \
>  +    t/gnupg/secring.gpg  t/gnupg/test-key.gpg  t/gnupg/trustdb.gpg \
>       hdlist-test.hdr test-rpm-1.0-1.noarch.rpm test-rpm-1.0-1.src.rpm \
>       test-rpm.spec
> 
>  @@ .
>  patch -p0 <<'@@ .'
>  Index: rpm/perl/RPM.pm
>  ============================================================================
>  $ cvs diff -u -r1.9 -r1.9.4.1 RPM.pm
>  --- rpm/perl/RPM.pm  11 Oct 2008 00:41:46 -0000      1.9
>  +++ rpm/perl/RPM.pm  29 Nov 2010 22:04:17 -0000      1.9.4.1
>  @@ -158,6 +158,9 @@
> 
>   Signature validation.
> 
>  +=head2 resign
>  +Resign a package.
>  +
>   =head1 HISTORY
> 
>   =over 8
>  @@ .
>  patch -p0 <<'@@ .'
>  Index: rpm/perl/RPM.xs
>  ============================================================================
>  $ cvs diff -u -r1.32 -r1.32.2.1 RPM.xs
>  --- rpm/perl/RPM.xs  21 Aug 2009 03:18:37 -0000      1.32
>  +++ rpm/perl/RPM.xs  29 Nov 2010 22:04:17 -0000      1.32.2.1
>  @@ -24,6 +24,7 @@
>   #include "rpmts.h"
>   #include "rpmte.h"
>   #include "rpmevr.h"
>  +#include "rpmcli.h"
>   #include "misc.h"
> 
>   /* The perl callback placeholder for output err messages */
>  @@ -223,3 +224,18 @@
>       (void)rpmtsFree(ts);
>       ts = NULL;
> 
>  +int
>  +resign(passphrase, rpmfile)
>  +    char * passphrase
>  +    char * rpmfile
>  +    CODE:
>  +    QVA_t qva = &rpmQVKArgs;
>  +    const char *file[] = { (const char*)rpmfile, NULL };
>  +
>  +    qva->qva_mode = RPMSIGN_ADD_SIGNATURE;
>  +    qva->passPhrase = passphrase;
>  +    
>  +    RETVAL = rpmcliSign(NULL, qva, file);
>  +    OUTPUT:
>  +    RETVAL
>  +
>  @@ .
>  patch -p0 <<'@@ .'
>  Index: rpm/perl/RPM/Sign.pm
>  ============================================================================
>  $ cvs diff -u -r0 -r1.1.2.2 Sign.pm
>  --- /dev/null        2010-11-29 23:03:59.000000000 +0100
>  +++ Sign.pm  2010-11-29 23:04:18.125257789 +0100
>  @@ -0,0 +1,204 @@
>  +package RPM::Sign;
>  +
>  +use strict;
>  +use Exporter;
>  +use RPM;
>  +use RPM::PackageIterator;
>  +use RPM::Header;
>  +use vars qw($AUTOLOAD);
>  +
>  +our @ISA = qw(Exporter);
>  +
>  +our @EXPORT = qw(
>  +);
>  +
>  +sub new {
>  +    my ($class, %options) = @_;
>  +
>  +    my $Sign;
>  +    $Sign = {
>  +        _signature => undef,
>  +        name => undef,
>  +        path => undef,
>  +        checkrpms => 1,
>  +        passphrase => undef,
>  +
>  +        password_file => undef,
>  +
>  +        log => sub {
>  +            my ($m, @v) = @_;
>  +            printf STDERR "$m\n", @v;
>  +        },
>  +
>  +    };
>  +
>  +    foreach (keys %$Sign) {
>  +        defined($options{$_}) and $Sign->{$_} = $options{$_};
>  +    }
>  +    
>  +    bless($Sign, $class);
>  +    $Sign->getpubkey();
>  +    $Sign->getpasswdfile();
>  +    $Sign;
>  +}
>  +
>  +sub getpasswdfile {
>  +    my ($self) = @_;
>  +    $self->{password_file} or return 1;
>  +    open(my $hpass, "<", $self->{password_file}) or return 0;
>  +    $self->{passphrase} = <$hpass>;
>  +    chomp($self->{passphrase});
>  +    close($hpass);
>  +    1;
>  +}
>  +
>  +sub adjustmacro {
>  +    my ($self) = @_;
>  +
>  +    defined($self->{_signature}) and RPM::add_macro("_signature 
> $self->{_signature}");
>  +
>  +    foreach my $macro (qw(_gpg_name _pgp_name)) {
>  +        RPM::add_macro("$macro $self->{name}") if (defined($self->{name}));
>  +    }
>  +    
>  +    foreach my $macro (qw(_gpg_path _pgp_path)) {
>  +        RPM::add_macro("$macro $self->{path}") if (defined($self->{path}));
>  +    }
>  +}
>  +
>  +sub restoremacro {
>  +    my ($self) = @_;
>  +
>  +    if (defined($self->{_signature})) { RPM::del_macro('_signature'); }
>  +    
>  +    if (defined($self->{name})) {
>  +        RPM::del_macro('_gpg_name');
>  +        RPM::del_macro('_pgp_name');
>  +    }
>  +
>  +    if (defined($self->{path})) {
>  +        RPM::del_macro('_gpg_path');
>  +        RPM::del_macro('_pgp_path');
>  +    }
>  +}
>  +
>  +sub getpubkey {
>  +    my ($self) = @_;
>  +    $self->adjustmacro();
>  +    my $gpgcmd;
>  +    if (RPM::expand_macro("%_signature") eq "gpg") {
>  +        $gpgcmd = '%__gpg --homedir %_gpg_path --list-public-keys 
> --with-colons \'%_gpg_name\'';
>  +    }
>  +    open(my $hgpg, RPM::expand_macro($gpgcmd) .'|') or return undef;
>  +    while (my $l = <$hgpg>) {
>  +        chomp($l);
>  +        my @v = split(':', $l);
>  +        if ($v[0] eq 'pub') {
>  +           $self->{keyid} = $v[4];
>  +           last;
>  +        }
>  +    }
>  +    close($hgpg);
>  +    $self->restoremacro();
>  +}
>  +
>  +sub rpmsign {
>  +    my ($self, $rpm, $header) = @_;
>  +    my $need = 1;
>  +
>  +    $header or return -1;
>  +    
>  +    if (RPM::expand_macro("_signature") || "" eq "gpg") {
>  +        my $sigid = $header->tagformat("%{DSAHEADER:pgpsig}");
>  +        ($sigid) = $sigid =~ m/Key ID (\S+)/;
>  +        if ($sigid && lc($sigid) eq lc($self->{keyid} || "")) { $need = 0 }
>  +    }
>  +    
>  +    if ($need > 0) {
>  +        $self->adjustmacro();
>  +        rpmresign($self->{passphrase}, $rpm) and $need = -1;
>  +        $self->restoremacro();
>  +    }
>  +
>  +    $need;
>  +}
>  +
>  +sub rpmssign {
>  +    my ($self, @rpms) = @_;
>  +
>  +    RPM::parserpms(
>  +        rpms => [ @rpms ],
>  +        checkrpms => $self->{checkrpms},
>  +        callback => sub {
>  +            my (%arg) = @_;
>  +            defined($arg{header}) or do {
>  +                $self->{log}->("bad rpm %s", $arg{rpm});
>  +                return;
>  +            };
>  +            my $res = $self->rpmsign($arg{rpm}, $arg{header});
>  +            if ($res > 0) { $self->{log}->("%s has been resigned", 
> $arg{rpm}); 
>  +            } elsif ($res < 0) { $self->{log}->("Can't resign %s", 
> $arg{rpm}); }
>  +        },
>  +    );
>  +}
>  +
>  +1;
>  +
>  +__END__
>  +
>  +=head1 NAME
>  +
>  +RPM::Sign
>  +
>  +=head1 SYNOPSIS
>  +
>  +A container to massively resign packages
>  +
>  +=head1 DESCRIPTION
>  +
>  +This object retains gpg options and provides functions to easilly sign or
>  +resign packages. It does not resign packages having already the proper
>  +signature.
>  +
>  +=head1 METHODS
>  +
>  +=head2 new(%options)
>  +
>  +Create a new RPM::Sign object.
>  +
>  +Options are:
>  +
>  +=over 4
>  +
>  +=item name
>  +
>  +The gpg key identity to use
>  +
>  +=item path
>  +
>  +the gpg homedir where keys are located
>  +
>  +=item password_file
>  +
>  +Use passphrase contains in this files
>  +
>  +=item passphrase
>  +
>  +Use this passphrase to unlock the key
>  +
>  +=item checkrpms
>  +
>  +Set to 0 remove the signature checking on packages
>  +
>  +=back
>  +
>  +=head2 rpmssign(@filelist)
>  +
>  +Sign or resign the packages passed are arguments
>  +
>  +=head1 SEE ALSO
>  +
>  +L<RPM>
>  +L<RPM::Header>
>  +
>  +=cut
>  @@ .
>  patch -p0 <<'@@ .'
>  Index: rpm/perl/RPM/Transaction.pm
>  ============================================================================
>  $ cvs diff -u -r1.6 -r1.6.8.1 Transaction.pm
>  --- rpm/perl/RPM/Transaction.pm      14 Aug 2007 16:38:04 -0000      1.6
>  +++ rpm/perl/RPM/Transaction.pm      29 Nov 2010 22:04:17 -0000      1.6.8.1
>  @@ -154,6 +154,14 @@
> 
>   Read a rpm and return a L<RPM::Header> object
> 
>  +=head2 $ts->importpubkey
>  +
>  +Import public key.
>  +
>  +=head2 $ts->checkrpm
>  +
>  +Check rpm..? (FIXME)
>  +
>   =cut
> 
>   1;
>  @@ .
>  patch -p0 <<'@@ .'
>  Index: rpm/perl/RPM_Transaction.xs
>  ============================================================================
>  $ cvs diff -u -r1.17.4.1 -r1.17.4.2 RPM_Transaction.xs
>  --- rpm/perl/RPM_Transaction.xs      30 Apr 2010 22:41:54 -0000      1.17.4.1
>  +++ rpm/perl/RPM_Transaction.xs      29 Nov 2010 22:04:17 -0000      1.17.4.2
>  @@ -522,3 +522,48 @@
>       PUTBACK;
>       _rpm2header(ts, filename, 0);
>       SPAGAIN;
>  +
>  +int
>  +importpubkey(ts, filename)
>  +    rpmts ts
>  +    char * filename
>  +    PREINIT:
>  +    uint8_t *pkt = NULL;
>  +    size_t pktlen = 0;
>  +    int rc;
>  +    CODE:
>  +    rpmtsClean(ts);
>  +    
>  +    if ((rc = pgpReadPkts(filename, (uint8_t ** ) &pkt, &pktlen)) <= 0) {
>  +        RETVAL = 1;
>  +    } else if (rc != PGPARMOR_PUBKEY) {
>  +        RETVAL = 1;
>  +    } else if (rpmcliImportPubkey(ts, pkt, pktlen) != RPMRC_OK) {
>  +        RETVAL = 1;
>  +    } else {
>  +        RETVAL = 0;
>  +    }
>  +    free(pkt);
>  +    OUTPUT:
>  +    RETVAL
>  +
>  +void
>  +checkrpm(ts, filename, sv_vsflags = NULL)
>  +    rpmts ts
>  +    char * filename
>  +    SV * sv_vsflags
>  +    PREINIT:
>  +    rpmVSFlags vsflags = RPMVSF_DEFAULT;
>  +    rpmVSFlags oldvsflags = RPMVSF_DEFAULT;
>  +    PPCODE:
>  +    oldvsflags = rpmtsVSFlags(ts); /* keep track of old settings */
>  +    if (sv_vsflags != NULL) {
>  +        vsflags = sv2constant((sv_vsflags), "rpmvsflags");
>  +        rpmtsSetVSFlags(ts, vsflags);
>  +    }
>  +    PUTBACK;
>  +    _rpm2header(ts, filename, 1); /* Rpmread header is not the most 
> usefull, 
>  +                                   * but no other function in rpmlib allow 
> this :( */
>  +    SPAGAIN;
>  +    rpmtsSetVSFlags(ts, oldvsflags); /* resetting in case of change */
>  +
>  @@ .
>  patch -p0 <<'@@ .'
>  Index: rpm/perl/t/gnupg/passphrase
>  ============================================================================
>  $ cvs diff -u -r0 -r1.1.2.2 passphrase
>  --- /dev/null        2010-11-29 23:03:59.000000000 +0100
>  +++ passphrase       2010-11-29 23:04:18.605283854 +0100
>  @@ -0,0 +1,6 @@
>  +RPM4
>  +
>  +# $Id: passphrase,v 1.1.2.2 2010/11/29 22:04:18 pkarlsen Exp $
>  +# This is key passphrase, this key is here only for testing.
>  +# Do not use it for signing/crypting.
>  +# Do not trust it.
>  @@ .
>  (cd rpm/perl/t/gnupg && \
>   uudecode <<'@@ .' && \
>   xdelta patch pubring.gpg.xdelta /dev/null pubring.gpg && \
>   rm -f pubring.gpg.xdelta)
>  Index: rpm/perl/t/gnupg/pubring.gpg
>  ============================================================================
>  begin 664 pubring.gpg.xdelta
>  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N-#0W,3`N
>  M;G5L;'-H:65L82XT-#<Q,"YA;&p...@````````#f\fxb,7AI=I$01:&-3]O
>  MW<[CX_IT^7J[RLTR'F:^],5.&UR/K>@_]([):U?AI]6/A=2GJ`HN.[3[ZQ*5
>  M!5E\LRWBMSP\^3BCY+\XJ\"R3N9(P;`ue9x+`mts_gy3copws_...@d)2YT6
>  MB$\+^3"]QO+A7M\YGU-=[`7BZYU^.9EOBUWEK.$K\KG_\![;==W/Y?\),RQ8
>  MSF!VU>EQYC[GJ8>;(Q_X3;OTMB.5^9^AHX;UN=5//U9*[)a...@f5/[Q6[<WI;
>  M3JS^^W;a...@f\x7;?6?YJ=34=9S>=&67u...@_-5d?g!!cl/V#D%UG<E.$:]
>  M>K0F[*GEP76'2]5?/Y1G?&(R:>G_]TM[KZ\MW+W0(<G]1//6*WMONAB<T]EC
>  M6=*7=S;?P%/NC'GZ.?N^U_PS%#M;!3:S,$Q>-#V7_Z#CN1\+.Y1^BZVL"%N]
>  M-?BG[NWG9V(^7"I[<Z7ZN,DT)C.EG28\TNR'*Y9?"9ny[mjbi__*kov...@u
>  MZ^RIW5,/7TT)>=WRX4]^1-E5E5/=;8T?>21EIW3G_&6...@mmj)HAXC)!I%`
>  MQ^+L7NWY2D_>+...@mrs$=m,V\:]7:N>=EF7?4NN1DI-97*)0...@hdle,K%31"
>  M,c*+...@e9^74zf0ee\$el[,2U<H*LA5*,Y,SP.QB_/32LH3BU)U%%S\%?S\
>  M0Q1"@UV#%3Q#X/r0...@$*"`IH)-2FI9:HY#;F)>2E%B=BI(IUYR?JY=1QR+
>  ML"`...@qpk$rbe,$DSLW%S<K`S,S&+,C$SBS$Q,LDQ,HDW,'!Q"FA-%^M:>#_&
>  MX])QAGF&G3$_77HTNV(\-IOLF_+\S?O,6#&&N;*.SJNKZX_Z=_YM+[+0G?*J
>  mxw...@u,#,Q;6H("?$T4<O-32G-2%33`'+AO=15HXMV\Q+S$HI3\/(>JQ*(D
>  MO?RB="2?.IVM-R?&IR;2#/,4_4.$3au...@d&;&^^X38!,8//_XPS)5?'W7E
>  MCW)Y^$WQDI6_#1?'%:Z(3P;Y="<C+SC'";`P',Y_*[Y_K_UB1B&MM=N.G*AX
>  MOX^KJ\-0B9W+(.;Q[NJBT)94MG_?LEP"0R9\_9A9Z%'7K9";F&6FM,&>Y<T3
>  M[K>s...@$.^0<7=Z^6=_O4<#*$]]:B]>NVF*Q:I>+DZ2)TYJUPC.80O28TI+D
>  M2^H%Q*\'=7_\JG1YUASEGW.-:ZLGZ"U.\'K,P,S*_#]LAMF3I&`&n...@kgyhf
>  ME3V])q...@[7mqw]/BW/JU+<5/O7B/>9V54A1T8_L3]/1<TZGE.U])>%[.T(Q=
>  MT<JQ9_:AW]/?,88_[%R^W5M!2^9.Y%0+CC-<BS<NXRN--#LZ1=)(I>>GUV3Y
>  MN(RX_V<:UNG^GZQW:%W0R^^K%O]?NV*":_IS5D%?B>,=GBP2P##GA*4N'N3@
>  m...@f!]ig,$VJ3A7K$Y0]=9C&];87I5+3`SS,][/LC=WG'VF)BMUN:QDZ/)"
>  m[g^vh....@#""`->t...@0``!^+"`````````-C8&a...@9f!@6/'TN'U4QBJ6JQF3
>  MK_VJ_/&FYA(G(R./1D%B27*&0DIB2:(f...@6,#`R7.`'(-3Y&0...@``````!*(E
>  '6$1:,#`T)0``
>  `
>  end
>  @@ .
>  (cd rpm/perl/t/gnupg && \
>   uudecode <<'@@ .' && \
>   xdelta patch random_seed.xdelta /dev/null random_seed && \
>   rm -f random_seed.xdelta)
>  Index: rpm/perl/t/gnupg/random_seed
>  ============================================================================
>  begin 664 random_seed.xdelta
>  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N-#0W,3`N
>  M;G5L;'-H:65L82XT-#<Q,"YA;&p...@````````#`5d"IOU#*O:/OWQ^&/C'
>  M+S[L!5+V&ybq__2cc...@]dtm-9d'7,\+>E1!"KA,&)-`3GZ7>%Y]YB5-QKJ
>  M,?I,^'H`/[$3TP"['V'G$F^DME1F:g...@pfa3cxwrw8=#voe18kf<]5$S'U"DD
>  MH;.DB!K$9*G4'@W=/NNL3,&n...@eu-i@XB0S7QPT';IC3UA^'d...@joo^a
>  M,\LM=87BPJ%C-W3)D:[S,D+X7Y!8/2R]^EK")@X"_2=S*/=4+-+(\"<6"@38
>  M;N/=TUG2W//V0*8/<8Z,o%fla\n...@8-r"B7GKMQ+9ED<$ZO`8B%N7%V0G7
>  M!B7,%(:$E3"%X`FAC[XB>.,XF\F+OX)HS3+A?S.GMB:W9)FWKTB7=)K4Y[O?
>  MJU`^W0Q)osonr...@_>6<GRB=_Y)*T''(C<2+J0,C3SK%<`$7(9...@k"=Z73<
>  ML#KH,;BM`>WN'L``)R?_+L\_Q2%:TL,EW-KGYVQ3D\[5T+8"PD62%YIY[!#(
>  MB0JY!]*UZJK6S#G^Q"J$XE(y`+i67q?*q]6]...@2hsl=.rmltb+&.?FH5<;
>  M^]KTIR\4T<\@(!>CJ!5U8^NR"C1&N\Y`NR:14C+)?...@b&PY)?6+-?(FWOS8)
>  MAF\/5JH8*SOAS&CHZ4#Q$H&_.F))BT9]CV\[X('7FC68)$L.5;7?5O0ZM"`#
>  M[EN!ALHJX"C76=K!*WW^E5]DC#LDGOE(RC#DTX)2.221*N_A6MJ_$:RJ)0*"
>  M8T:\':`#KIJ"5...@1c],@%^;L)B'<!...@9#5m4pkg[ufk5#f_>_)LZPS'&G^K#:[
>  MIO;7!;P*UCU(GUD"```...@````````#8v!h8&9...@8%bqmm32gku&K;#5__\-
>  M1]?=.C=9&!EY-`H22Y(S%%(22Q(u...@9&"XR0(`T6D(FT(```````*Q)5A$
>  %6C`P-"4`
>  `
>  end
>  @@ .
>  (cd rpm/perl/t/gnupg && \
>   uudecode <<'@@ .' && \
>   xdelta patch secring.gpg.xdelta /dev/null secring.gpg && \
>   rm -f secring.gpg.xdelta)
>  Index: rpm/perl/t/gnupg/secring.gpg
>  ============================================================================
>  begin 664 secring.gpg.xdelta
>  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N-#0W,3`N
>  M;G5L;'-H:65L82XT-#<Q,"YA;&p...@````````#f\kxd,7AI=I$01:&-3]O
>  MW<[CX_IT^7J[RLTR'F:^],5.&UR/K>@_]([):U?AI]6/A=2GJ`HN.[3[ZQ*5
>  M!5E\LRWBMSP\^3BCY+\XJ\"R3N9(P;`ue9x+`mts_gy3copws_...@d)2YT6
>  MB$\+^3"]QO+A7M\YGU-=[`7BZYU^.9EOBUWEK.$K\KG_\![;==W/Y?\),RQ8
>  MSF!VU>EQYC[GJ8>;(Q_X3;OTMB.5^9^AHX;UN=5//U9*[)a...@f5/[Q6[<WI;
>  M3JS^^W;a...@f\x7;?6?YJ=34=9S>=&67u...@_-5d?g!!cl/V#D%UG<E.$:]
>  M>K0F[*GEP76'2]5?/Y1G?&(R:>G_]TM[KZ\MW+W0(<G]1//6*WMONAB<T]EC
>  M6=*7=S;?P%/NC'GZ.?N^U_PS%#M;!3:S,$Q>-#V7_Z#CN1\+.Y1^BZVL"%N]
>  M-?BG[NWG9V(^7"I[<Z7ZN,DT)C.EG28\TNR'*Y9?"9ny[mjbi__*kov...@u
>  MZ^RIW5,/7TT)>=WRX4]^1-E5E5/=;8T?>21EIW3G_&6...@mmj)HAXC)!I%`
>  MQ^+L7NWY2D_>+...@mrs$=m,V\:]7:N>=EF7_Q\S,=/O/E82NT!>?$C)67[+U
>  MDIY?*Y^<;FWSM6\I3]0%%JO5-FL_G]FW8N^U[.H(G:];tih...@+:3...@=ef4
>  M?D%I2ZU'2DYF<8E"22J0R$ZM5-`(R<@L!K.`5'Y>3J5"6GX16#HS+UVAJ"!7
>  m...@s/0_$+LY/*RE/+$K547#Q5_#S#U$(#78-5O`,@?...@d*#0x`"f...@hv*:EE
>  MJ3D.N8EY*46)V:d...@g7k)^;EV'7$LPH),#'*L3*"$QB3-S,;-R<'.S,0LRL3,
>  M+,;$R"3'R"3>P,#%*:`U7:QKX?T8CTO'&>:'16FSGDH(9W3TT^\16#LML^WL
>  M?PF&>2K^2T\I_DN+4-R4UB8;NIDSVN2CX`8F!H8M+4$!OB8*N?DII3FI"AI@
>  m#m...@ht\6y>8EYB44I^GD-58E&27GY1.I)/G<[6FQ/C4Q-IAGF*_B%"IPZG
>  M,SR2C%C??4)L`N.''W\8YLJOC[KR1[D\_*9XR<K?AHOC"E?$)X-\.I<Q`IQA
>  m...@8#n>_%=^_UWXQHY#6VFU'3E2\W\?5U6&HQ,YE$/-X=W51:$LJV[]O62Z!
>  M(1.^?LPL]*CK5LA-S#)3VF#/\N8)]]O9,V2"'7*.+F_?K._W*&#EB6^MQ6M7
>  M;;%8M<O%2=+$:<U:X1E,(7I,:4GR)?4"XM>#NC]^5;H\:X[RS[G&M=43]!8G
>  M>#UF8&9E_A\VP^Q)4C"#7=253TV3RI[>$PGP]KVX[VEQ;OW:EN*G7KS'O,Y*
>  M*0JZL?T)>GJNZ=3RG:\D/"]G:,:N:.78,_O0[^GO&,,?=B[?[JV@)7,G<JH%
>  MQQFNQ1N7\95&FAV=(FFDTO/3:[)\7$;<_S,-ZW3_3]8[M"[HY?=5B_^O73'!
>  M-?TYJZ"OQ'&4O+'^&(]T1+#)YU^&2\\KL7',brkxr...@?wahm<A;#WJ_UK?
>  M7NII>[?FUO-5SA(-DV9-N!K%5?[(3[;28WEV<VLK4X<GBP0P^CAA"94'.::\
>  M`ACFEUR/$K^MZJ^8>TGAOO6A=?H,%HI^#'-X&4_6Y/&>\,]O/3+KRZUWNEL_
>  M/_`%Q107`*2T4;M<!0``'XL(`````````V-@:&!F8&!8D;u...@4kw'#YZ+$<_>
>  M*KW^%K;N#A<C(X]&06))<H9"2F))HB8V!8P,#'>X`/IU*0I"```````%*"58
>  &1%HP,#0E
>  `
>  end
>  @@ .
>  patch -p0 <<'@@ .'
>  Index: rpm/perl/t/gnupg/test-key.gpg
>  ============================================================================
>  $ cvs diff -u -r0 -r1.1.2.2 test-key.gpg
>  --- /dev/null        2010-11-29 23:04:18.000000000 +0100
>  +++ test-key.gpg     2010-11-29 23:04:18.755293187 +0100
>  @@ -0,0 +1,26 @@
>  +-----BEGIN PGP PUBLIC KEY BLOCK-----
>  +Version: GnuPG v1.2.4 (GNU/Linux)
>  +
>  +mQGiBEDpJpERBACs+drbbg4K8tPXhyTZdgwDDmejQrBFxqiPwu4CSrpx8qvjEieU
>  +JRGmwrv1pCSgag6bOF+04cnjaHT/FwUQpokDWRFWrHlJoFFHaP32I1n+nj/bv5Bg
>  +pUKgF5ZU8Jd8OeG9TZzzZUQ/EF9/QvpCN7ZdqkMoTRTzj8O8Pa6L5x/+EwCgpwA2
>  +1ULjab5DlcODWeBOltLtiGUD/jFBKDvOq+XxeRi4k8gEvI3UPs4utMir/e2hw1yC
>  +N6G3TZpOJHx+iMuy1LoqrBcwz3pZb1MwucA+QlF/imBBWurirFblOcGuw3Un6+Ef
>  +AeQ0kqX/76WN161xu6FAYkfIg7XUvdlEMM4svDl0jm7NbzBJHsw3Z84/jusPmCGJ
>  +hRCzBACTopdtD8FBzvihiCL7Fql4Vqu1U/kt2+fMXPDSduzUe8c0lgI2Irk0DBsH
>  +w3in1FaZrtai5f521v4b8Xqazcq7lcPVZFTrhPD8b1h21STKi4aB8QwZHZSLbP0A
>  +0kGLFqhyuBQ0sBRRQXNrjSufIuTto+BOplQ9srYX9dR9nssdB7R9SGRsaXN0IHRl
>  +c3Qga2V5IChUaGlzIGtleSBpcyBvbmx5IGZvciB0ZXN0aW5nIHJwbSBzaWduaW5n
>  +IHNvZnR3YXJlLCBETyBOT1QgVVNFUyBJVCwgRE8gTk9UIFRSVVNUIElUKSA8ZGV2
>  +ZWxAbWFuZHJha2Vzb2Z0LmNvbT6IXgQTEQIAHgUCQOkmkQIbAwYLCQgHAwIDFQID
>  +AxYCAQIeAQIXgAAKCRAqlxaKod9cSNLHAJ4xiVz5RIwpilxIszS+lOfs72ldFgCd
>  +HUFDq3t/xU+J/YdyOC2U6ojrbLy5AQ0EQOkmkRAEAMNv7Re/vT+jARIqrbbEyHjv
>  +vgqKiDEiBwowXOO7e3JVhGUG/vZqRFFUkPXxaXFIfosgbWFqNiKwPwTs5Avtm5gc
>  +U0BsxaeHsy9O4lCpyPaFc62qtDiqukRCGTRCrK0TmAJULgJmYh90fxAX11KL8fUi
>  +05qcI/mdM317kC6jYErjAAMFA/9WmDbkYlMAPlrU8oKSduXeFFBLTdG+5XNtf62E
>  +c+VKDcZKzRohEUYG/FLlzoLKp7nqGEnTaCldqIUIvJvC+5fuAVfhiae3SyAqHNxZ
>  +lTgIzAqjsaYOdVk2xZQZMiSM+UqTH15oXv/MgK4t/5Muwq5S6feqo/+tqJBFZ+cF
>  +EU0Yx4hJBBgRAgAJBQJA6SaRAhsMAAoJECqXFoqh31xISlAAn1kzaAaSc20WfhEl
>  +2uM8BV2NJNICAJ9o75o/N0GbzHxqZacdGVWncQv+PQ==
>  +=QAx/
>  +-----END PGP PUBLIC KEY BLOCK-----
>  @@ .
>  (cd rpm/perl/t/gnupg && \
>   uudecode <<'@@ .' && \
>   xdelta patch trustdb.gpg.xdelta /dev/null trustdb.gpg && \
>   rm -f trustdb.gpg.xdelta)
>  Index: rpm/perl/t/gnupg/trustdb.gpg
>  ============================================================================
>  begin 664 trustdb.gpg.xdelta
>  M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N-#0W,3`N
>  M;G5L;'-H:65L82XT-#<Q,"YA;&p...@````````#8tpo2&=F9F1E``*GL_7]
>  m...@!(Q<."70PJFX0J9,;Y.X;53>JCD1U/`Q)@<9O,UC9E+3NL"9h31?...@_
>  MQH,-(JF`4,?+X!NL8'`PXLPZTX335XXO^#%3Z.&#I6!U9CP,R.IN.CZH*YZ^
>  M8L*]7S=O_4NP",u...@7o(/I$Z>@1G9?0"0NY78*04``!^+"`````````-C8&A@
>  m...@6+'3X\B9"FG>HDD:16M*3C#YK>1b9.3...@l2<Y02$DL2=3$IH"1...@6$e
>  6%p#$8k...@```````-,E6$1:,#`T)0``
>  `
>  end
>  @@ .
> ______________________________________________________________________
> RPM Package Manager                                    http://rpm5.org
> CVS Sources Repository                                rpm-...@rpm5.org

______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
Developer Communication List                        rpm-devel@rpm5.org

Reply via email to