From 62b52fbc4f174d1d021f225785ef5b8308522571 Mon Sep 17 00:00:00 2001 From: Parul Sharma Date: Mon, 23 Sep 2024 13:50:58 +0530 Subject: [PATCH] Draft:Update process should check version and not allow reversion through update #759 --- .../prospero/cli/commands/UpdateCommand.java | 20 ++++++++++++------- .../prospero/actions/UpdateAction.java | 14 +++++++++++++ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/prospero-cli/src/main/java/org/wildfly/prospero/cli/commands/UpdateCommand.java b/prospero-cli/src/main/java/org/wildfly/prospero/cli/commands/UpdateCommand.java index d1cdc898e..680562c6a 100644 --- a/prospero-cli/src/main/java/org/wildfly/prospero/cli/commands/UpdateCommand.java +++ b/prospero-cli/src/main/java/org/wildfly/prospero/cli/commands/UpdateCommand.java @@ -29,6 +29,7 @@ import java.util.stream.Collectors; import org.apache.commons.io.FileUtils; +import org.eclipse.aether.artifact.Artifact; import org.jboss.galleon.ProvisioningException; import org.jboss.galleon.diff.FsDiff; import org.jboss.galleon.diff.FsEntry; @@ -117,7 +118,7 @@ public Integer call() throws Exception { log.tracef("Perform full update"); console.println(CliMessages.MESSAGES.updateHeader(installationDir)); - + InstallationMetadata installationMetadata = InstallationMetadata.loadInstallation(installationDir); try (UpdateAction updateAction = actionFactory.update(installationDir, mavenOptions, console, repositories)) { performUpdate(updateAction, yes, console, installationDir); } @@ -133,6 +134,12 @@ private boolean performUpdate(UpdateAction updateAction, boolean yes, CliConsole Path targetDir = null; try { targetDir = Files.createTempDirectory("update-candidate"); + final List manifestUpdates = updateAction.findCurrentChannelSessionManifests(); + if(!manifestUpdates.isEmpty()){ + for(Artifact version: manifestUpdates){ + console.println("Manifest version update detected: Version ["+ version + "]is now available."); + } + } if (buildUpdate(updateAction, targetDir, yes, console, () -> console.confirmUpdates())) { console.println(""); console.buildUpdatesComplete(); @@ -422,17 +429,17 @@ private FeaturePackLocation getFpl(InstallationProfile knownFeaturePack, String public UpdateCommand(CliConsole console, ActionFactory actionFactory) { super(console, actionFactory, CliConstants.Commands.UPDATE, List.of( - new UpdateCommand.PrepareCommand(console, actionFactory), - new UpdateCommand.ApplyCommand(console, actionFactory), - new UpdateCommand.PerformCommand(console, actionFactory), - new UpdateCommand.ListCommand(console, actionFactory), + new PrepareCommand(console, actionFactory), + new ApplyCommand(console, actionFactory), + new PerformCommand(console, actionFactory), + new ListCommand(console, actionFactory), new SubscribeCommand(console, actionFactory)) ); + } private static boolean buildUpdate(UpdateAction updateAction, Path updateDirectory, boolean yes, CliConsole console, Supplier confirmation) throws OperationException, ProvisioningException { final UpdateSet updateSet = updateAction.findUpdates(); - console.updatesFound(updateSet.getArtifactUpdates()); if (updateSet.isEmpty()) { return false; @@ -470,5 +477,4 @@ public static Path detectProsperoInstallationPath() throws ArgumentParsingExcept } return Paths.get(modulePath).toAbsolutePath().getParent(); } - } diff --git a/prospero-common/src/main/java/org/wildfly/prospero/actions/UpdateAction.java b/prospero-common/src/main/java/org/wildfly/prospero/actions/UpdateAction.java index 7b1e5c4c1..b7e1e875b 100644 --- a/prospero-common/src/main/java/org/wildfly/prospero/actions/UpdateAction.java +++ b/prospero-common/src/main/java/org/wildfly/prospero/actions/UpdateAction.java @@ -20,10 +20,13 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.commons.io.FileUtils; +import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.artifact.DefaultArtifact; import org.jboss.galleon.util.PathsUtils; import org.wildfly.channel.Channel; import org.wildfly.channel.Repository; @@ -35,6 +38,7 @@ import org.wildfly.prospero.api.InstallationMetadata; import org.wildfly.prospero.api.exceptions.OperationException; import org.wildfly.prospero.galleon.GalleonEnvironment; +import org.wildfly.prospero.metadata.ManifestVersionRecord; import org.wildfly.prospero.model.ProsperoConfig; import org.wildfly.prospero.updates.UpdateFinder; import org.wildfly.prospero.updates.UpdateSet; @@ -171,4 +175,14 @@ private ProsperoConfig addTemporaryRepositories(List repositories) { return new ProsperoConfig(channels, prosperoConfig.getMavenOptions()); } + + public List findCurrentChannelSessionManifests() { + List manifestArtifacts = new ArrayList<>(); + List mavenManifests = metadata.getManifestVersions().get().getMavenManifests(); + for (ManifestVersionRecord.MavenManifest mavenManifest : mavenManifests) { + manifestArtifacts.add(new DefaultArtifact(mavenManifest.getGroupId(), mavenManifest.getArtifactId(), "yaml", mavenManifest.getVersion())); + } + return manifestArtifacts; + } + }