summaryrefslogtreecommitdiff
path: root/fml/lib/FML/Merge.pm
diff options
context:
space:
mode:
Diffstat (limited to 'fml/lib/FML/Merge.pm')
-rw-r--r--fml/lib/FML/Merge.pm238
1 files changed, 238 insertions, 0 deletions
diff --git a/fml/lib/FML/Merge.pm b/fml/lib/FML/Merge.pm
new file mode 100644
index 00000000..dcc8d649
--- /dev/null
+++ b/fml/lib/FML/Merge.pm
@@ -0,0 +1,238 @@
+#-*- 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<http://www.fml.org/software/FNF/> 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<http://www.fml.org/> for more details.
+
+=cut
+
+
+1;