| Index: third_party/dpkg-dev/scripts/Dpkg/Interface/Storable.pm
 | 
| diff --git a/third_party/dpkg-dev/scripts/Dpkg/Interface/Storable.pm b/third_party/dpkg-dev/scripts/Dpkg/Interface/Storable.pm
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..adef210fcecd1ed191c29feb8aedda991af6936b
 | 
| --- /dev/null
 | 
| +++ b/third_party/dpkg-dev/scripts/Dpkg/Interface/Storable.pm
 | 
| @@ -0,0 +1,147 @@
 | 
| +# Copyright © 2010 Raphaël Hertzog <hertzog@debian.org>
 | 
| +#
 | 
| +# This program is free software; you can redistribute it and/or modify
 | 
| +# it under the terms of the GNU General Public License as published by
 | 
| +# the Free Software Foundation; either version 2 of the License, or
 | 
| +# (at your option) any later version.
 | 
| +#
 | 
| +# This program is distributed in the hope that it will be useful,
 | 
| +# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
| +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
| +# GNU General Public License for more details.
 | 
| +#
 | 
| +# You should have received a copy of the GNU General Public License
 | 
| +# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | 
| +
 | 
| +package Dpkg::Interface::Storable;
 | 
| +
 | 
| +use strict;
 | 
| +use warnings;
 | 
| +
 | 
| +our $VERSION = '1.00';
 | 
| +
 | 
| +use Carp;
 | 
| +
 | 
| +use Dpkg::Gettext;
 | 
| +use Dpkg::ErrorHandling;
 | 
| +use Dpkg::Compression::FileHandle;
 | 
| +
 | 
| +use overload
 | 
| +    '""' => \&_stringify,
 | 
| +    'fallback' => 1;
 | 
| +
 | 
| +=encoding utf8
 | 
| +
 | 
| +=head1 NAME
 | 
| +
 | 
| +Dpkg::Interface::Storable - common methods related to object serialization
 | 
| +
 | 
| +=head1 DESCRIPTION
 | 
| +
 | 
| +Dpkg::Interface::Storable is only meant to be used as parent
 | 
| +class for other objects. It provides common methods that are
 | 
| +all implemented on top of two basic methods parse() and output().
 | 
| +
 | 
| +=head1 BASE METHODS
 | 
| +
 | 
| +Those methods must be provided by the object that wish to inherit
 | 
| +from Dpkg::Interface::Storable so that the methods provided can work.
 | 
| +
 | 
| +=over 4
 | 
| +
 | 
| +=item $obj->parse($fh, $desc)
 | 
| +
 | 
| +This methods initialize the object with the data stored in the
 | 
| +filehandle. $desc is optional and is a textual description of
 | 
| +the filehandle used in error messages.
 | 
| +
 | 
| +=item $string = $obj->output($fh)
 | 
| +
 | 
| +This method returns a string representation of the object in $string
 | 
| +and it writes the same string to $fh (if it's defined).
 | 
| +
 | 
| +=back
 | 
| +
 | 
| +=head1 PROVIDED METHODS
 | 
| +
 | 
| +=over 4
 | 
| +
 | 
| +=item $obj->load($filename)
 | 
| +
 | 
| +Initialize the object with the data stored in the file. The file can be
 | 
| +compressed, it will be uncompressed on the fly by using a
 | 
| +Dpkg::Compression::FileHandle object. If $filename is "-", then the
 | 
| +standard input is read (no compression is allowed in that case).
 | 
| +
 | 
| +=cut
 | 
| +
 | 
| +sub load {
 | 
| +    my ($self, $file, @options) = @_;
 | 
| +    unless ($self->can('parse')) {
 | 
| +	croak ref($self) . ' cannot be loaded, it lacks the parse method';
 | 
| +    }
 | 
| +    my ($desc, $fh) = ($file, undef);
 | 
| +    if ($file eq '-') {
 | 
| +	$fh = \*STDIN;
 | 
| +	$desc = _g('<standard input>');
 | 
| +    } else {
 | 
| +	$fh = Dpkg::Compression::FileHandle->new();
 | 
| +	open($fh, '<', $file) or syserr(_g('cannot read %s'), $file);
 | 
| +    }
 | 
| +    my $res = $self->parse($fh, $desc, @options);
 | 
| +    if ($file ne '-') {
 | 
| +	close($fh) or syserr(_g('cannot close %s'), $file);
 | 
| +    }
 | 
| +    return $res;
 | 
| +}
 | 
| +
 | 
| +=item $obj->save($filename)
 | 
| +
 | 
| +Store the object in the file. If the filename ends with a known
 | 
| +compression extension, it will be compressed on the fly by using a
 | 
| +Dpkg::Compression::FileHandle object. If $filename is "-", then the
 | 
| +standard output is used (data are written uncompressed in that case).
 | 
| +
 | 
| +=cut
 | 
| +
 | 
| +sub save {
 | 
| +    my ($self, $file, @options) = @_;
 | 
| +    unless ($self->can('output')) {
 | 
| +	croak ref($self) . ' cannot be saved, it lacks the output method';
 | 
| +    }
 | 
| +    my $fh;
 | 
| +    if ($file eq '-') {
 | 
| +	$fh = \*STDOUT;
 | 
| +    } else {
 | 
| +	$fh = Dpkg::Compression::FileHandle->new();
 | 
| +	open($fh, '>', $file) or syserr(_g('cannot write %s'), $file);
 | 
| +    }
 | 
| +    $self->output($fh, @options);
 | 
| +    if ($file ne '-') {
 | 
| +	close($fh) or syserr(_g('cannot close %s'), $file);
 | 
| +    }
 | 
| +}
 | 
| +
 | 
| +=item "$obj"
 | 
| +
 | 
| +Return a string representation of the object.
 | 
| +
 | 
| +=cut
 | 
| +
 | 
| +sub _stringify {
 | 
| +    my ($self) = @_;
 | 
| +    unless ($self->can('output')) {
 | 
| +	croak ref($self) . ' cannot be stringified, it lacks the output method';
 | 
| +    }
 | 
| +    return $self->output();
 | 
| +}
 | 
| +
 | 
| +=back
 | 
| +
 | 
| +=head1 AUTHOR
 | 
| +
 | 
| +Raphaël Hertzog <hertzog@debian.org>.
 | 
| +
 | 
| +=cut
 | 
| +
 | 
| +1;
 | 
| 
 |