Details
-
Bug
-
Resolution: Fixed
-
Major
-
5.2.1
-
None
-
Unknown
-
N/A
-
N/A
-
Description
My purpose is to install an extension programatically, non-interactive and synchronous. So I use the following groovy code, which sleeps in a loop, waking up from time to time and answering EM questions with "install new version of the page" for all pages where there is conflict.
Everything works fine for new pages (authors of pages from the xar are preserved), but when a page actually gets overwritten (it exists before the install and should get completely overwritten with the extension version after), the page's author and contentAuthor after the install are XWiki.XWikiGuest.
Code is here (extensionManager is previously set to $services.extension from the velocity calling this groovy):
String extensionNamespace = 'wiki:' + wikiname; def installJobStatus = null; // prepare the install request def installRequest = extensionManager.createInstallRequest(extensionId, extensionVersion, extensionNamespace); // preserve the author of the documents in the extension installRequest.removeProperty('user.reference'); // start the install def installJob = extensionManager.install(installRequest); installJobStatus = installJob.getStatus(); // sleep loop to wake up and check if there are questions from time to time, to answer them with the default answer while (installJobStatus.getState() != JobStatus.State.FINISHED) { // sleep 1 second sleep(1000); // if the state is waiting, answer the question and continue if (installJobStatus.getState() == JobStatus.State.WAITING) { def question = installJobStatus.getQuestion(); log('INFO', "Extension " + extensionId + " on namespace " + extensionNamespace + " has stopped in state Waiting with question " + question.class.getName() + " for document " + question.getNextDocument().getPrefixedFullName()); // answer the question and set always installJobStatus.getQuestion().setGlobalAction(ConflictQuestion.GlobalAction.NEXT); // answer this for all documents from now on installJobStatus.getQuestion().setAlways(true); // and continue running the job installJobStatus.answered(); } }