From e0d335278d5a7c35c31165440cba2da6b4d0d7b5 Mon Sep 17 00:00:00 2001
From: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Date: Fri, 3 Apr 2020 08:55:45 +0000
Subject: [PATCH] Bug 22437: Delete older merge requests at new merge time
Content-Type: text/plain; charset=utf-8

If you merge A to B, we should remove older AA merges (regular
merge to itself) in the queue before deleting A.

Test plan:
[1] Set merge limit in prefs to say X.
[2] Find three authorities A, B, C with linkcount >X, >X, <X.
[3] Merge C to B. This creates a 'BB merge' in the queue.
    Auth C is deleted.
[4] Merge B to A. Creating AA and BA in the queue.
    Auth B is deleted.
    Optionally verify that BB is no longer in the queue.
[5] Run the merge_authorities.pl cron job.
    Verify that the linkcount to A is the former total of ABC.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Phil Ringnalda <philringnalda@gmail.com>
---
 authorities/merge.pl | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/authorities/merge.pl b/authorities/merge.pl
index 80c3640dc1..5b8c4fb260 100755
--- a/authorities/merge.pl
+++ b/authorities/merge.pl
@@ -25,6 +25,7 @@ use C4::AuthoritiesMarc;
 use C4::Koha;
 use C4::Biblio;
 
+use Koha::Authority::MergeRequests;
 use Koha::Authority::Types;
 use Koha::MetadataRecord::Authority;
 
@@ -84,6 +85,9 @@ if ($merge) {
 
     # Delete the other record. Do not merge. It is unneeded and could under
     # special circumstances have unwanted side-effects.
+    # Remove older pending merge requests for $recordid2 to itself. The above merge did the job already or will do. (See bug 22437)
+    my $condition = { authid => $recordid2, authid_new => [undef, 0, $recordid2], done => 0 };
+    Koha::Authority::MergeRequests->search($condition)->delete;
     DelAuthority({ authid => $recordid2, skip_merge => 1 });
 
     # Parameters
-- 
2.11.0