diff --git a/platform/ide-core/api-dump.txt b/platform/ide-core/api-dump.txt index 8025a21436b6..d194ce350df9 100644 --- a/platform/ide-core/api-dump.txt +++ b/platform/ide-core/api-dump.txt @@ -116,6 +116,8 @@ com.intellij.ide.wizard.StepListener - java.util.EventListener - a:stateChanged():V c:com.intellij.notification.Notification +a:com.intellij.notification.NotificationAction +- s:createExpiring(java.lang.String,java.lang.String,java.util.function.BiConsumer):com.intellij.notification.NotificationAction com.intellij.notification.NotificationGroupManager - s:getInstance():com.intellij.notification.NotificationGroupManager - a:getNotificationGroup(java.lang.String):com.intellij.notification.NotificationGroup diff --git a/platform/ide-core/src/com/intellij/notification/NotificationAction.java b/platform/ide-core/src/com/intellij/notification/NotificationAction.java index 5f887e218786..f8783a4e8dcd 100644 --- a/platform/ide-core/src/com/intellij/notification/NotificationAction.java +++ b/platform/ide-core/src/com/intellij/notification/NotificationAction.java @@ -57,6 +57,14 @@ public abstract class NotificationAction extends DumbAwareAction { return new Simple(dynamicText, action, false, action, null); } + public static @NotNull NotificationAction createExpiring( + @NotNull @NotificationContent String text, + @NotNull String actionId, + @NotNull BiConsumer action + ) { + return new Simple(text, action, true, action, actionId); + } + public static @NotNull NotificationAction createExpiring( @NotNull @NotificationContent String text, @NotNull BiConsumer action diff --git a/platform/platform-impl/initial-config-import/src/com/intellij/openapi/application/ConfigImportHelper.java b/platform/platform-impl/initial-config-import/src/com/intellij/openapi/application/ConfigImportHelper.java index 3879bd78edf1..e3f7f4a77fad 100644 --- a/platform/platform-impl/initial-config-import/src/com/intellij/openapi/application/ConfigImportHelper.java +++ b/platform/platform-impl/initial-config-import/src/com/intellij/openapi/application/ConfigImportHelper.java @@ -396,12 +396,22 @@ public final class ConfigImportHelper { } private static Path backupAndDeleteCurrentConfig(Path currentConfig, Logger log, @Nullable ConfigImportSettings settings) throws IOException { + return backupCurrentConfig(currentConfig, log, settings, true); + } + + public static Path backupCurrentConfig(Path currentConfig, Logger log, @Nullable ConfigImportSettings settings) throws IOException { + return backupCurrentConfig(currentConfig, log, settings, false); + } + + private static Path backupCurrentConfig(Path currentConfig, Logger log, @Nullable ConfigImportSettings settings, boolean deleteFiles) throws IOException { var tempDir = Files.createDirectories(currentConfig.getFileSystem().getPath(System.getProperty("java.io.tmpdir"))); var tempBackupDir = Files.createTempDirectory(tempDir, currentConfig.getFileName() + "-backup-" + UUID.randomUUID()); log.info("Backup config from " + currentConfig + " to " + tempBackupDir); NioFiles.copyRecursively(currentConfig, tempBackupDir, file -> !shouldSkipFileDuringImport(file, settings)); - deleteCurrentConfigDir(currentConfig, log); + if (deleteFiles) { + deleteCurrentConfigDir(currentConfig, log); + } var pluginDir = currentConfig.getFileSystem().getPath(PathManager.getPluginsDir().toString()); if (Files.exists(pluginDir) && !pluginDir.startsWith(currentConfig)) { @@ -409,7 +419,9 @@ public final class ConfigImportHelper { log.info("Backup plugins dir separately from " + pluginDir + " to " + pluginBackup); NioFiles.createDirectories(pluginBackup); NioFiles.copyRecursively(pluginDir, pluginBackup); - NioFiles.deleteRecursively(pluginDir); + if (deleteFiles) { + NioFiles.deleteRecursively(pluginDir); + } } return tempBackupDir; diff --git a/platform/platform-impl/src/com/intellij/openapi/application/ConfigBackup.kt b/platform/platform-impl/src/com/intellij/openapi/application/ConfigBackup.kt index 0a7c32d52727..876c4105f93c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/ConfigBackup.kt +++ b/platform/platform-impl/src/com/intellij/openapi/application/ConfigBackup.kt @@ -16,7 +16,7 @@ import kotlin.io.path.* @ApiStatus.Internal class ConfigBackup(private val configDir: Path) { @Throws(IOException::class) - fun moveToBackup(dirToMove: Path) { + fun moveToBackup(dirToMove: Path): Path { val backupDir = getBackupDir(configDir) if (backupDir.exists()) { migratePreviousBackupIfExists(backupDir) @@ -27,6 +27,8 @@ class ConfigBackup(private val configDir: Path) { LOG.info("Move backup from $dirToMove to $backupPath") NioFiles.copyRecursively(dirToMove, backupPath) NioFiles.deleteRecursively(dirToMove) + + return backupPath } private fun migratePreviousBackupIfExists(backupDir: Path) {