installer: added 'make upgrade' target
authorGalen Charlton <galen.charlton@liblime.com>
Fri, 15 Feb 2008 08:04:35 +0000 (21:04 +1300)
committerJoshua Ferraro <jmf@liblime.com>
Fri, 15 Feb 2008 14:30:53 +0000 (08:30 -0600)
INTRANET_TMPL_DIR
INTRANET_WWW_DIR
OPAC_TMPL_DIR
OPAC_WWW_DIR
KOHA_CONF_DIR
OPAC_TMPL_DIR
OPAC_WWW_DIR
PAZPAR2_CONF_DIR
ZEBRA_CONF_DIR

For each directory on the list, if an existing file
installed file is different from the version
coming from the new package, it is copied to a backup file
whose name will have the suffix "_koha_<old_version_number>"
or "_upgrade_backup", depending on whether
the --prev-install-log option was used or not
during 'perl Makefile.PL'.

The directories whose files were backed up were
chosen because they contain configuration and
HTML files that a non-programmer Koha user
is likely to change.  Consequently, the backup
files produced by 'make upgrade' are not a substitute
for doing a complete backup of one's Koha
installation before upgrading.

Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
Makefile.PL
install_misc/UpgradeBackup.pm [new file with mode: 0644]
misc/koha-install-log

index 3b8db26..79c0375 100644 (file)
@@ -751,6 +751,7 @@ sub get_install_log_values {
         next if /^#/ or /^\s*$/;
         next if /^=/;
         next unless m/=/;
+        s/\s+$//g;
         my ($key, $value) = split /=/, $_, 2;
         $values->{$key} = $value;
     }
@@ -1355,6 +1356,8 @@ install :: all install_koha warn_koha_env_vars
         $install .= _update_zebra_conf_target();
     }
 
+    $install .= upgrade();
+
     return $install;
 }
 
@@ -1378,6 +1381,39 @@ sub _update_zebra_conf_target {
     return $target;
 }
 
+sub upgrade {
+    my $upgrade = ""; 
+
+    my $backup_suffix;
+    if (exists $install_log_values{'KOHA_INSTALLED_VERSION'}) {
+        my $version = $install_log_values{'KOHA_INSTALLED_VERSION'};
+        $version =~ s/\./_/g;
+        $backup_suffix = "_koha_$version";
+    } else {
+        $backup_suffix = "_upgrade_backup";
+    }
+
+    $upgrade .= qq/
+MOD_BACKUP = \$(ABSPERLRUN) -Minstall_misc::UpgradeBackup -e 'backup_changed_files({\@ARGV}, '$backup_suffix', '\''\$(VERBINST)'\'', '\''\$(UNINST)'\'');' --
+
+upgrade :: make_upgrade_backup install
+\t\$(NOECHO) \$(NOOP)
+make_upgrade_backup ::
+\t\$(NOECHO) umask 022; \$(MOD_BACKUP) \\
+\t\t\$(KOHA_INST_KOHA_CONF_DIR) \$(KOHA_DEST_KOHA_CONF_DIR) \\
+\t\t\$(KOHA_INST_INTRANET_TMPL_DIR) \$(KOHA_DEST_INTRANET_TMPL_DIR) \\
+\t\t\$(KOHA_INST_INTRANET_WWW_DIR) \$(KOHA_DEST_INTRANET_WWW_DIR) \\
+\t\t\$(KOHA_INST_OPAC_TMPL_DIR) \$(KOHA_DEST_OPAC_TMPL_DIR) \\
+\t\t\$(KOHA_INST_OPAC_WWW_DIR) \$(KOHA_DEST_OPAC_WWW_DIR) \\
+\t\t\$(KOHA_INST_OPAC_TMPL_DIR) \$(KOHA_DEST_OPAC_TMPL_DIR) \\
+\t\t\$(KOHA_INST_OPAC_WWW_DIR) \$(KOHA_DEST_OPAC_WWW_DIR) \\
+\t\t\$(KOHA_INST_PAZPAR2_CONF_DIR) \$(KOHA_DEST_PAZPAR2_CONF_DIR) \\
+\t\t\$(KOHA_INST_ZEBRA_CONF_DIR) \$(KOHA_DEST_ZEBRA_CONF_DIR)
+/;
+
+    return $upgrade;
+}
+
 sub postamble {
     # put directory mappings into Makefile
     # so that Make will export as environment
diff --git a/install_misc/UpgradeBackup.pm b/install_misc/UpgradeBackup.pm
new file mode 100644 (file)
index 0000000..869d1e1
--- /dev/null
@@ -0,0 +1,88 @@
+package install_misc::UpgradeBackup;
+
+# Copyright (C) 2008 LibLime
+#
+# This file is part of Koha.
+#
+# Koha 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.
+#
+# Koha 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
+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+# Suite 330, Boston, MA  02111-1307 USA
+
+use strict;
+use File::Compare qw(compare);
+use Cwd qw(cwd);
+use File::Copy;
+use File::Find;
+use File::Spec;
+use Exporter;
+
+use vars qw(@ISA @EXPORT $VERSION);
+
+@ISA = ('Exporter');
+@EXPORT = ('backup_changed_files');
+$VERSION = '3.00';
+
+=head1 NAME
+
+install_misc::UpgradeBackup
+
+=head1 DESCRIPTION
+
+This is a helper module used during a 'make upgrade' that
+creates backups of files updated during an upgrade.
+
+=cut
+
+sub backup_changed_files {
+    my $from_to = shift;
+    my $suffix = shift;
+    my $verbose = shift;
+    my $inc_uninstall = shift;
+
+    my $cwd = cwd();
+    foreach my $sourceroot (sort keys %$from_to) {
+        my $targetroot = $from_to->{$sourceroot};
+        my $currdir = File::Spec->catdir($cwd, $sourceroot);
+
+        next unless -d $currdir;
+
+        chdir $currdir or die "could not change to $currdir: $!";
+       
+        # expand path
+        find(sub {
+            return unless -f $_;
+            my $filename = $_;
+
+            my $targetdir  = File::Spec->catdir($targetroot, $File::Find::dir);
+            my $targetfile = File::Spec->catfile($targetdir, $filename);
+            my $sourcedir  = File::Spec->catdir($currdir, $File::Find::dir);
+            my $sourcefile = File::Spec->catfile($sourcedir, $filename);
+
+            if (-f $targetfile) {
+                my ($size) = (stat $sourcefile)[7];
+                my $backup = $targetfile . $suffix;
+                unless (-s $targetfile == $size and not compare($sourcefile, $targetfile)) {
+                    print "Backed up $targetfile to $backup\n";
+                    File::Copy::copy($targetfile, $backup);        
+                }
+            }
+        }, ".");
+    }
+}
+
+=head1 AUTHOR
+
+Galen Charlton <galen.charlton@liblime.com>
+
+=cut
+
+1;
index 5767708..f2afff7 100644 (file)
@@ -3,7 +3,7 @@
 # It is meant for use during future
 # upgrades of Koha, and should not
 # be edited.
-KOHA_INSTALLED_VERSION=__KOHA_INSTALLED_VERSION__ 
+KOHA_INSTALLED_VERSION=__KOHA_INSTALLED_VERSION__
 LOG_DIR=__LOG_DIR__
 DB_TYPE=__DB_TYPE__
 DB_NAME=__DB_NAME__