Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
XWiki
xwiki-commons
Commits
3ea98786
Commit
3ea98786
authored
Jun 09, 2022
by
Thomas Mortagne
Browse files
XCOMMONS-2450: Allow indicating to skip already installed extension in an install job
parent
56f826c1
Changes
2
Hide whitespace changes
Inline
Side-by-side
xwiki-commons-core/xwiki-commons-extension/xwiki-commons-extension-api/src/main/java/org/xwiki/extension/job/InstallRequest.java
View file @
3ea98786
...
...
@@ -37,6 +37,11 @@ public class InstallRequest extends AbstractExtensionRequest
*/
public
static
final
String
PROPERTY_EXTENSION_PROPERTIES
=
"extension.properties"
;
/**
* @see #isFailOnExist()
*/
public
static
final
String
PROPERTY_EXTENSION_FAIL_ON_EXIST
=
"extension.failOnExist"
;
/**
* Serialization identifier.
*/
...
...
@@ -57,6 +62,24 @@ public InstallRequest(Request request)
super
(
request
);
}
/**
* @return whether or not the wiki creation should fail if the database already exists
* @since 14.5RC1
*/
public
boolean
isFailOnExist
()
{
return
getProperty
(
PROPERTY_EXTENSION_FAIL_ON_EXIST
,
true
);
}
/**
* @param failOnExist whether or not the wiki creation should fail if the database already exists
* @since 14.5RC1
*/
public
void
setFailOnExist
(
boolean
failOnExist
)
{
setProperty
(
PROPERTY_EXTENSION_FAIL_ON_EXIST
,
failOnExist
);
}
/**
* @return the custom extension properties to be set on each of the extensions that are going to be installed from
* this request
...
...
xwiki-commons-core/xwiki-commons-extension/xwiki-commons-extension-api/src/main/java/org/xwiki/extension/job/internal/AbstractInstallPlanJob.java
View file @
3ea98786
...
...
@@ -48,7 +48,7 @@
import
org.xwiki.extension.handler.ExtensionHandler
;
import
org.xwiki.extension.internal.ExtensionFactory
;
import
org.xwiki.extension.internal.ExtensionUtils
;
import
org.xwiki.extension.job.
Extension
Request
;
import
org.xwiki.extension.job.
Install
Request
;
import
org.xwiki.extension.job.plan.ExtensionPlanAction
;
import
org.xwiki.extension.job.plan.ExtensionPlanAction.Action
;
import
org.xwiki.extension.job.plan.ExtensionPlanNode
;
...
...
@@ -66,7 +66,7 @@
* @version $Id$
* @since 4.1M1
*/
public
abstract
class
AbstractInstallPlanJob
<
R
extends
Extension
Request
>
extends
AbstractExtensionPlanJob
<
R
>
public
abstract
class
AbstractInstallPlanJob
<
R
extends
Install
Request
>
extends
AbstractExtensionPlanJob
<
R
>
{
protected
static
class
ModifableExtensionPlanNode
extends
DefaultExtensionPlanNode
{
...
...
@@ -315,8 +315,10 @@ protected void installExtension(ExtensionId extensionId, boolean dependency, Str
ModifableExtensionPlanNode
node
=
installExtension
(
extensionId
,
dependency
,
namespace
);
addExtensionNode
(
node
);
parentBranch
.
add
(
node
);
if
(
node
!=
null
)
{
addExtensionNode
(
node
);
parentBranch
.
add
(
node
);
}
}
private
boolean
checkCoreDependency
(
ExtensionDependency
extensionDependency
,
...
...
@@ -716,10 +718,12 @@ && hasIncompatileRootDependency(extensionDependency)) {
ModifableExtensionPlanNode
node
=
installExtensionDependency
(
targetDependency
,
true
,
namespace
,
extensionContext
,
parents
);
node
.
versionConstraint
=
versionConstraint
;
if
(
node
!=
null
)
{
node
.
versionConstraint
=
versionConstraint
;
addExtensionNode
(
node
);
parentBranch
.
add
(
node
);
addExtensionNode
(
node
);
parentBranch
.
add
(
node
);
}
}
/**
...
...
@@ -993,7 +997,9 @@ private ModifableExtensionPlanNode installExtension(Extension sourceExtension, E
// Check if the extension is already installed
Extension
installedExtension
=
checkInstalledExtension
(
rewrittenExtension
,
namespace
);
if
(
installedExtension
!=
rewrittenExtension
)
{
if
(
installedExtension
==
null
)
{
return
null
;
}
else
if
(
installedExtension
!=
rewrittenExtension
)
{
sourceExtension
=
installedExtension
;
// Rewrite the extension
...
...
@@ -1155,8 +1161,15 @@ private Extension checkInstalledExtension(Extension extension, String namespace)
this
.
installedExtensionRepository
.
getInstalledExtension
(
extension
.
getId
());
if
(
installedExtension
!=
null
&&
installedExtension
.
isInstalled
(
namespace
))
{
if
(
installedExtension
.
isValid
(
namespace
))
{
throw
new
InstallException
(
String
.
format
(
"Extension [%s] is already installed on namespace [%s]"
,
extension
.
getId
(),
namespace
));
if
(
this
.
getRequest
().
isFailOnExist
())
{
throw
new
InstallException
(
String
.
format
(
"Extension [%s] is already installed on namespace [%s]"
,
extension
.
getId
(),
namespace
));
}
else
{
this
.
logger
.
warn
(
"Extension [{}] is already installed on namespace [{}]"
,
installedExtension
.
getId
(),
namespace
);
return
null
;
}
}
// In case the extension is already installed on the namespace but is invalid continue with it to make clear
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment