From 1fa09515dd6e3d4fb0f4b7977dcf7e099abe33e0 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Thu, 16 Oct 2014 09:58:24 +0200 Subject: [PATCH] Bug 13068: Counterpatch follow-up for controlling workflow Content-Type: text/plain; charset=utf-8 The workflow for dev updates can be altered with devupdatecontrol: [1] devupdatecontrol= PROD for production machines: Do not execute RunRemainingDevUpdates, so only official db revs. This is the default. [2] devupdatecontrol= RESET: Reinstall dev updates after an official db rev. [3] devupdatecontrol= ALWAYS: Run the dev updates at each upgrade. [4] devupdatecontrol=TRACK: Only install new dev updates. It does not reset the local pref listing all recently applied dev updates. ONLY use this if you know what you are doing! Note: devupdatecontrol is a configuration variable from koha-conf.xml. If it does not exist or is empty, we fall back to PROD (safest). If it differs from PROD, ALWAYS or TRACK, it falls back to RESET. Note2: Initially, devupdatecontrol was a preference. It has been moved to koha-conf.xml as requested by several developers (Nov 24). Test plan: [1] Add a few lines calling ExecDBRev to updatedatabase with corresponding files in atomicupdate like (insert the correct version!!): ExecDBRev( $aupd, '13068', 'My test', '13068.pl', '3.17.00.028'); Do not forget to update kohaversion.pl accordingly. Add some other files in atomicupdate as dev updates. [2] Repeat for the various modes of devupdatecontrol (see above): Reset the database version. You could edit Version in local preferences. Optionally clear/delete the _LocalAtomicUpdates pref. Run updatestructure and check which db revs and dev updates are run or skipped. Run it again and check which dev updates are run or skipped. Signed-off-by: Marcel de Rooy Signed-off-by: Paul Poulain Signed-off-by: Jonathan Druart --- debian/templates/koha-conf-site.xml.in | 2 ++ etc/koha-conf.xml | 2 ++ installer/data/mysql/updatedatabase.pl | 17 ++++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/debian/templates/koha-conf-site.xml.in b/debian/templates/koha-conf-site.xml.in index 7049cba..cff7043 100644 --- a/debian/templates/koha-conf-site.xml.in +++ b/debian/templates/koha-conf-site.xml.in @@ -282,6 +282,8 @@ __END_SRU_PUBLICSERVER__ /var/lock/koha/__KOHASITE__ 1 /etc/koha/searchengine/queryparser.yaml + PROD + diff --git a/etc/koha-conf.xml b/etc/koha-conf.xml index 289d51d..5004930 100644 --- a/etc/koha-conf.xml +++ b/etc/koha-conf.xml @@ -114,6 +114,8 @@ __PAZPAR2_TOGGLE_XML_POST__ __ZEBRA_LOCK_DIR__ 1 __KOHA_CONF_DIR__/searchengine/queryparser.yaml + PROD + diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 906395c..812b224 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -50,12 +50,18 @@ use constant ATOMICUPD_PREF => '_LocalAtomicUpdates'; my $debug = 0; my $aupd = { #hash for atomic updates location => C4::Context->config('intranetdir')."/installer/data/mysql/atomicupdate", + mode => C4::Context->config('devupdatecontrol') || 'PROD', remember => C4::Context->preference(ATOMICUPD_PREF)//'', skipfiles => { 'Bug-4246-Talking-Tech-itiva-phone-notifications.pl' => 1, 'oai_sets.sql' => 1, }, }; +# Short explanation of the various dev update control modes: +# PROD: Only install official database revisions (default and fallback) +# RESET: After an official database rev, reinstall all development updates +# ALWAYS: When upgrading, reinstall all development updates +# TRACK: Do not reinstall applied development updates my ( $sth, $sti, @@ -9700,7 +9706,8 @@ sub RunRemainingAtomicUpdates { if( exists $atomicupd->{skipfiles}->{$upd} ) { next; # Skip official db revision } - if( $atomicupd->{remember} =~ /(^|;)$upd;/ ) { + if( $atomicupd->{mode} ne 'ALWAYS' && + $atomicupd->{remember} =~ /(^|;)$upd;/ ) { #Skip files that have recently been applied #Note that an official db rev erases this list print "Skipping $upd as recently applied dev update\n"; @@ -9758,7 +9765,7 @@ sub ExecDBRev { print "Dev upgrade $file done\n"; _atomic_memory( $atomicupd, $file ) if $rv; } else { - _atomic_memory( $atomicupd ); #Official db rev clears the atomic pref + _atomic_memory( $atomicupd ); #Official dbrev may clear atomic pref SetVersion($version); print "Upgrade to $version done (Bug $bugno - $descr)\n"; } @@ -9766,6 +9773,10 @@ sub ExecDBRev { sub _atomic_memory { my ( $atomicupd, $upd ) = @_; + + return if $atomicupd->{mode} eq 'ALWAYS'; # ignores the pref + return if !$upd && $atomicupd->{mode} eq 'TRACK'; # no reset + $atomicupd->{remember}= $upd? $atomicupd->{remember}."$upd;": ''; C4::Context->set_preference( ATOMICUPD_PREF, $atomicupd->{remember} ); } @@ -9879,5 +9890,5 @@ sub CheckVersion { } } -RunRemainingAtomicUpdates( $aupd ); +RunRemainingAtomicUpdates( $aupd ) if $aupd->{mode} ne 'PROD'; exit; -- 1.7.7.6