Mirror uninstall state in plugin object

This commit is contained in:
Rene Pfeuffer
2019-09-16 14:32:14 +02:00
parent 7ec2b0c31d
commit 5a8ed638dd
3 changed files with 23 additions and 0 deletions

View File

@@ -127,6 +127,14 @@ public final class InstalledPlugin implements Plugin
return core;
}
public boolean isMarkedForUninstall() {
return markedForUninstall;
}
public void setMarkedForUninstall(boolean markedForUninstall) {
this.markedForUninstall = markedForUninstall;
}
//~--- fields ---------------------------------------------------------------
/** plugin class loader */
@@ -142,4 +150,6 @@ public final class InstalledPlugin implements Plugin
private final WebResourceLoader webResourceLoader;
private final boolean core;
private boolean markedForUninstall;
}

View File

@@ -190,6 +190,7 @@ public class DefaultPluginManager implements PluginManager {
doThrow().violation("plugin is a core plugin and cannot be uninstalled").when(installed.isCore());
dependencyTracker.removeInstalled(installed.getDescriptor());
installed.setMarkedForUninstall(true);
try {
Files.createFile(installed.getDirectory().resolve(InstalledPlugin.UNINSTALL_MARKER_FILENAME));

View File

@@ -345,6 +345,18 @@ class DefaultPluginManagerTest {
assertThat(temp.resolve("uninstall")).exists();
}
@Test
void shouldMarkPluginForUninstall(@TempDirectory.TempDir Path temp) {
InstalledPlugin mailPlugin = createInstalled("scm-mail-plugin");
when(mailPlugin.getDirectory()).thenReturn(temp);
when(loader.getInstalledPlugins()).thenReturn(singletonList(mailPlugin));
manager.uninstall("scm-mail-plugin", false);
verify(mailPlugin).setMarkedForUninstall(true);
}
@Test
void shouldThrowExceptionWhenUninstallingCorePlugin(@TempDirectory.TempDir Path temp) {
InstalledPlugin mailPlugin = createInstalled("scm-mail-plugin");