Skip to content

Commit

Permalink
Draft:Update process should check version and not allow reversion th…
Browse files Browse the repository at this point in the history
…rough update #759
  • Loading branch information
parsharma committed Sep 23, 2024
1 parent ff41cff commit d5dffb9
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import java.util.stream.Collectors;

import org.apache.commons.io.FileUtils;
import org.eclipse.aether.resolution.VersionRangeResolutionException;
import org.eclipse.aether.version.Version;
import org.jboss.galleon.ProvisioningException;
import org.jboss.galleon.diff.FsDiff;
import org.jboss.galleon.diff.FsEntry;
Expand Down Expand Up @@ -117,9 +119,9 @@ 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);
performUpdate(updateAction, yes, console, installationDir, repositories);
}
}

Expand All @@ -129,10 +131,16 @@ public Integer call() throws Exception {
return ReturnCodes.SUCCESS;
}

private boolean performUpdate(UpdateAction updateAction, boolean yes, CliConsole console, Path installDir) throws OperationException, ProvisioningException {
private boolean performUpdate(UpdateAction updateAction, boolean yes, CliConsole console, Path installDir, List<Repository> repositories) throws OperationException, ProvisioningException {
Path targetDir = null;
try {
targetDir = Files.createTempDirectory("update-candidate");
final List<Version> manifestUpdates = updateAction.findManifestUpdates(repositories.get(0));
if(!manifestUpdates.isEmpty()){
for(Version 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();
Expand All @@ -151,7 +159,7 @@ private boolean performUpdate(UpdateAction updateAction, boolean yes, CliConsole
} else {
return false;
}
} catch (IOException e) {
} catch (IOException | VersionRangeResolutionException e) {
throw ProsperoLogger.ROOT_LOGGER.unableToCreateTemporaryDirectory(e);
} finally {
if (targetDir != null) {
Expand Down Expand Up @@ -422,17 +430,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<Boolean> confirmation) throws OperationException, ProvisioningException {
private static boolean buildUpdate(UpdateAction updateAction, Path updateDirectory, boolean yes, CliConsole console, Supplier<Boolean> confirmation) throws OperationException, ProvisioningException, VersionRangeResolutionException {
final UpdateSet updateSet = updateAction.findUpdates();

console.updatesFound(updateSet.getArtifactUpdates());
if (updateSet.isEmpty()) {
return false;
Expand Down Expand Up @@ -470,5 +478,4 @@ public static Path detectProsperoInstallationPath() throws ArgumentParsingExcept
}
return Paths.get(modulePath).toAbsolutePath().getParent();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.VersionRangeRequest;
import org.eclipse.aether.resolution.VersionRangeResolutionException;
import org.eclipse.aether.resolution.VersionRangeResult;
import org.eclipse.aether.version.Version;
import org.jboss.galleon.util.PathsUtils;
import org.wildfly.channel.Channel;
import org.wildfly.channel.Repository;
Expand Down Expand Up @@ -171,4 +179,17 @@ private ProsperoConfig addTemporaryRepositories(List<Repository> repositories) {

return new ProsperoConfig(channels, prosperoConfig.getMavenOptions());
}

public List<Version> findManifestUpdates(Repository repository) throws VersionRangeResolutionException {
final RepositorySystem system = mavenSessionManager.newRepositorySystem();
final DefaultRepositorySystemSession session = mavenSessionManager.newRepositorySystemSession(system);
final List<RemoteRepository> repositories = List.of(new RemoteRepository.Builder("repo", "default", repository.getUrl()).build());

VersionRangeRequest versionRangeRequest = new VersionRangeRequest(new DefaultArtifact("org.jboss.eap.channels", "eap-8.0", "manifest", "yaml", "(,)"),
repositories, null);
VersionRangeResult versionRangeResult = system.resolveVersionRange(session, versionRangeRequest);

return versionRangeResult.getVersions(); // discovered versions
}

}

0 comments on commit d5dffb9

Please sign in to comment.