#-*- perl -*-
#
# Copyright (C) 2004,2005 Ken'ichi Fukamachi
# All rights reserved. This program is free software; you can
# redistribute it and/or modify it under the same terms as Perl itself.
#
# $FML: List.pm,v 1.7 2004/07/23 15:59:08 fukachan Exp $
#
package FML::Merge::FML4::List;
use strict;
use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD);
use Carp;
=head1 NAME
FML::Merge::FML4::List - convert member list files.
=head1 SYNOPSIS
=head1 DESCRIPTION
=head1 METHODS
=head2 new()
constructor.
=cut
# Descriptions: constructor.
# Arguments: OBJ($self) OBJ($curproc) OBJ($m_config)
# Side Effects: none
# Return Value: OBJ
sub new
{
my ($self, $curproc, $m_config) = @_;
my ($type) = ref($self) || $self;
my $me = {
_curproc => $curproc,
_m_config => $m_config,
};
return bless $me, $type;
}
# Descriptions: convert list files from fml4 to fml8 format.
# Arguments: OBJ($self)
# Side Effects: none
# Return Value: none
sub convert
{
my ($self) = @_;
my $m_config = $self->{ _m_config };
use FML::Merge::FML4::Config;
my $config = new FML::Merge::FML4::Config;
my $files = $config->get_old_list_files();
my $fp;
for my $file (@$files) {
$fp = "_convert_$file";
$fp =~ s/-/_/g;
$fp =~ s@/@_@g;
if ($self->can($fp)) {
$self->$fp($m_config);
}
else {
croak("cannot convert $file");
}
}
}
# Descriptions: convert fml4 actives to fml8 recipients file.
# Arguments: OBJ($self) OBJ($m_config)
# Side Effects: create fml8 file.
# Return Value: none
sub _convert_actives
{
my ($self, $m_config) = @_;
my $src = $m_config->backup_file_path('actives');
my $dst = $m_config->new_file_path('recipients');
$self->_write_without_comment($src, $dst);
}
# Descriptions: convert fml4 members to fml8 members file.
# Arguments: OBJ($self) OBJ($m_config)
# Side Effects: create fml8 file.
# Return Value: none
sub _convert_members
{
my ($self, $m_config) = @_;
my $src = $m_config->backup_file_path('members');
my $dst = $m_config->new_file_path('members');
$self->_write_without_comment($src, $dst);
}
# Descriptions: convert fml4 members-admin to
# fml8 {recipients,members}-admin file.
# Arguments: OBJ($self) OBJ($m_config)
# Side Effects: create fml8 file.
# Return Value: none
sub _convert_members_admin
{
my ($self, $m_config) = @_;
my $src = $m_config->backup_file_path('members-admin');
my $dst = $m_config->new_file_path('members-admin');
$self->_write_without_comment($src, $dst);
$dst = $m_config->new_file_path('recipients-admin');
$self->_write_without_comment($src, $dst);
}
# Descriptions: convert fml4 moderators to
# fml8 {recipients,members}-moderator file.
# Arguments: OBJ($self) OBJ($m_config)
# Side Effects: create fml8 file.
# Return Value: none
sub _convert_moderators
{
my ($self, $m_config) = @_;
my $src = $m_config->backup_file_path('moderators');
my $dst = $m_config->new_file_path('members-moderator');
$self->_write_without_comment($src, $dst);
$dst = $m_config->new_file_path('recipients-moderator');
$self->_write_without_comment($src, $dst);
}
# Descriptions: convert fml4 etc/passwd to fml8 etc/passwd-admin.
# Arguments: OBJ($self) OBJ($m_config)
# Side Effects: create fml8 file.
# Return Value: none
sub _convert_etc_passwd
{
my ($self, $m_config) = @_;
my $src = $m_config->backup_file_path('etc/passwd');
my $dst = $m_config->new_file_path('etc/passwd-admin');
# XXX-TODO: NOT YET IMPLEMENTED
print STDERR "warning: etc/passwrd conversion not yet implemented\n";
}
# Descriptions: filter output by removing comment line.
# Arguments: OBJ($self) STR($src) STR($dst)
# Side Effects: create $dst file.
# Return Value: none
sub _write_without_comment
{
my ($self, $src, $dst) = @_;
my $tmp = sprintf("%s.new.%s", $dst, $$);
unless (-f $src) {
print STDERR "warning: $src not found, so not converted.\n";
return;
}
print STDERR "creating $dst\n";
print STDERR " from $src\n";
use FileHandle;
my $rh = new FileHandle $src;
my $wh = new FileHandle "> $tmp";
if (defined $rh && defined $wh) {
my $buf;
LINE:
while ($buf = <$rh>) {
next LINE if $buf =~ /^\#/o;
print $wh $buf;
}
$wh->close();
$rh->close();
unless (rename($tmp, $dst)) {
croak("cannot rename $tmp $dst");
}
}
else {
croak("cannot open $src") unless defined $rh;
croak("cannot open $tmp") unless defined $wh;
}
}
=head1 CODING STYLE
See C on fml coding style guide.
=head1 AUTHOR
Ken'ichi Fukamachi
=head1 COPYRIGHT
Copyright (C) 2004,2005 Ken'ichi Fukamachi
All rights reserved. This program is free software; you can
redistribute it and/or modify it under the same terms as Perl itself.
=head1 HISTORY
FML::Merge::FML4::List appeared in fml8 mailing list driver package.
See C for more details.
=cut
1;