#-*- perl -*- # # Copyright (C) 2004 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: @template.pm,v 1.8 2004/01/01 07:29:27 fukachan Exp $ # package FML::Merge; use strict; use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); use Carp; use FML::Merge::Utils; push(@INC, qw(FML::Merge::Utils)); =head1 NAME FML::Merge - merge other system configurations to fml8 ones. =head1 SYNOPSIS =head1 DESCRIPTION =cut # Descriptions: constructor. # Arguments: OBJ($self) OBJ($curproc) HASH_REF($params) # Side Effects: none # Return Value: OBJ sub new { my ($self, $curproc, $params) = @_; my ($type) = ref($self) || $self; my $me = { _curproc => $curproc, _params => $params, }; # import variables: ml_* ... for my $x (keys %$params) { $me->{ "_$x" } = $params->{ $x } if defined $params->{ $x }; }; # back up to $ml_home_dir/.fml4rc/ directory. use File::Spec; my $ml_home_dir = $params->{ ml_home_dir } || ''; if ($ml_home_dir) { my $x_dir = File::Spec->catfile($ml_home_dir, ".fml4rc"); $me->{ _backup_dir } = $x_dir; $curproc->mkdir($x_dir, "mode=private") unless -d $x_dir; } else { croak("specify \$ml_home_dir"); } return bless $me, $type; } # Descriptions: specify target system. # Arguments: OBJ($self) STR($system) # Side Effects: none # Return Value: none sub set_target_system { my ($self, $system) = @_; # dummy yet. } =head1 BACK UP CONFIGURATION FILES =cut # Descriptions: back up old configuration files. # Arguments: OBJ($self) # Side Effects: move or copy files. # Return Value: none sub backup_old_config_files { my ($self) = @_; use FML::Merge::FML4::Config; my $config = new FML::Merge::FML4::Config; my $files = $config->get_old_config_files(); for my $f (@$files) { my $mode = $self->_need_copy() ? "copy" : $config->backup_mode($f); my $src = $self->old_file_path($f); my $dst = $self->backup_file_path($f); if ($mode eq 'move') { printf STDERR "mv %-30s %-30s\n", $src, $dst; } elsif ($mode eq 'copy') { printf STDERR "cp %-30s %-30s\n", $src, $dst; } else { print STDERR "unknown mode (DO NOTHING).\n"; } } } # Descriptions: check if we always need copy files to back up dir. # Arguments: OBJ($self) # Side Effects: none # Return Value: NUM(1 or 0) sub _need_copy { my ($self) = @_; my $old_home_dir = $self->{ _src_dir }; my $ml_home_dir = $self->{ _ml_home_dir }; if ($old_home_dir ne $ml_home_dir) { return 1; } else { return 0; } } =head1 DISABLE INCLUDE FILES To cause temporary failure, disable old include* files by changing it to "exit 75". Code 75 depends on the value of EX_TEMPFAIL of your system. See /usr/include/sysexit.h for more details. For example, the value of NetBSD follows. EX_TEMPFAIL -- temporary failure, indicating something that is not really an error. In sendmail, this means that a mailer (e.g.) could not create a connection, and the request should be reattempted later. =cut sub disable_include_files { my ($self) = @_; use FML::Merge::FML4::Config; my $config = new FML::Merge::FML4::Config; my $files = $config->get_old_include_files(); for my $f (@$files) { my $file = $self->old_file_path($f); print STDERR "disable $file\n"; } } =head1 =cut sub convert_list_files { my ($self) = @_; my $curproc = $self->{ _curproc }; my $params = $self->{ _params } || {}; use FML::Merge::FML4::List; my $list = new FML::Merge::FML4::List $curproc, $params; $list->convert(); } =head1 UTILITIES =cut sub old_file_path { my ($self, $file) = @_; my $old_home_dir = $self->{ _src_dir }; use File::Spec; return File::Spec->catfile($old_home_dir, $file); } sub new_file_path { my ($self, $file) = @_; my $ml_home_dir = $self->{ _ml_home_dir }; use File::Spec; return File::Spec->catfile($ml_home_dir, $file); } sub backup_file_path { my ($self, $file) = @_; my $back_up_dir = $self->{ _backup_dir }; use File::Spec; return File::Spec->catfile($back_up_dir, $file); } =head1 CODING STYLE See C on fml coding style guide. =head1 AUTHOR Ken'ichi Fukamachi =head1 COPYRIGHT Copyright (C) 2004 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 appeared in fml8 mailing list driver package. See C for more details. =cut 1;