From edea340dc2d0c2ff39e5b47653400636b86264e3 Mon Sep 17 00:00:00 2001 From: Thomas Mortagne <thomas.mortagne@gmail.com> Date: Mon, 3 Oct 2016 11:48:22 +0200 Subject: [PATCH] XWIKI-13756: Repository extension update might end up deleteding and recreating the same dependencies over and over --- .../internal/RepositoryManager.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/xwiki-platform-core/xwiki-platform-repository/xwiki-platform-repository-server-api/src/main/java/org/xwiki/repository/internal/RepositoryManager.java b/xwiki-platform-core/xwiki-platform-repository/xwiki-platform-repository-server-api/src/main/java/org/xwiki/repository/internal/RepositoryManager.java index 277d5c674b5..b52604f13fe 100644 --- a/xwiki-platform-core/xwiki-platform-repository/xwiki-platform-repository-server-api/src/main/java/org/xwiki/repository/internal/RepositoryManager.java +++ b/xwiki-platform-core/xwiki-platform-repository/xwiki-platform-repository-server-api/src/main/java/org/xwiki/repository/internal/RepositoryManager.java @@ -927,6 +927,9 @@ private boolean updateExtensionVersionDependencies(XWikiDocument document, Exten if (xobjects != null) { boolean deleteExistingObjects = false; + // Clone since we are going to modify and parse it at the same time + xobjects = new ArrayList(document.getXObjects(XWikiRepositoryModel.EXTENSIONDEPENDENCY_CLASSREFERENCE)); + for (int i = 0; i < xobjects.size(); ++i) { BaseObject dependencyObject = xobjects.get(i); @@ -951,16 +954,20 @@ private boolean updateExtensionVersionDependencies(XWikiDocument document, Exten xobjectDependency .setRepositories(XWikiRepositoryModel.toRepositoryDescriptors(xobjectRepositories)); - ExtensionDependency dependency = dependencies.get(dependencyIndex); + if (dependencies.size() > dependencyIndex) { + ExtensionDependency dependency = dependencies.get(dependencyIndex); - if (!dependency.equals(xobjectDependency)) { - deleteExistingObjects = true; + if (dependency.equals(xobjectDependency)) { + ++dependencyIndex; - document.removeXObject(dependencyObject); - needSave = true; - } else { - ++dependencyIndex; + continue; + } } + + deleteExistingObjects = true; + + document.removeXObject(dependencyObject); + needSave = true; } } } -- GitLab