From 9629ab47ffabe776d30e524a1f48980ce82f9ee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Hohwiller?= Date: Sat, 6 Jul 2024 01:02:01 +0200 Subject: [PATCH 1/5] #451: fixes and improvements for installation --- .../tools/ide/tool/LocalToolCommandlet.java | 72 ++++++++++++------- 1 file changed, 48 insertions(+), 24 deletions(-) diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java b/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java index 62108bf4aa..417c703843 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java @@ -73,16 +73,17 @@ protected boolean doInstall(boolean silent) { VersionIdentifier installedVersion = getInstalledVersion(); Step step = this.context.newStep(silent, "Install " + this.tool, configuredVersion); try { - // install configured version of our tool in the software repository if not already installed - ToolInstallation installation = installInRepo(configuredVersion); - // check if we already have this version installed (linked) locally in IDE_HOME/software - VersionIdentifier resolvedVersion = installation.resolvedVersion(); - if (resolvedVersion.equals(installedVersion) && !installation.newInstallation()) { + ToolRepository repository = this.context.getDefaultToolRepository(); + String edition = getEdition(); + VersionIdentifier resolvedVersion = repository.resolveVersion(this.tool, edition , configuredVersion); + if (resolvedVersion.equals(installedVersion)) { IdeLogLevel level = silent ? IdeLogLevel.DEBUG : IdeLogLevel.INFO; this.context.level(level).log("Version {} of tool {} is already installed", installedVersion, getToolWithEdition()); step.success(); return false; } + // install configured version of our tool in the software repository if not already installed + ToolInstallation installation = installInRepo(resolvedVersion, edition, repository); // we need to link the version or update the link. Path toolPath = getToolPath(); FileAccess fileAccess = this.context.getFileAccess(); @@ -145,30 +146,26 @@ public ToolInstallation installInRepo(VersionIdentifier version, String edition) public ToolInstallation installInRepo(VersionIdentifier version, String edition, ToolRepository toolRepository) { VersionIdentifier resolvedVersion = toolRepository.resolveVersion(this.tool, edition, version); - - if (Files.exists(this.dependency.getDependencyJsonPath(getEdition()))) { - installDependencies(resolvedVersion); - } else { - this.context.trace("No Dependencies file found"); - } - Path toolPath = this.context.getSoftwareRepositoryPath().resolve(toolRepository.getId()).resolve(this.tool).resolve(edition) - .resolve(resolvedVersion.toString()); + .resolve(resolvedVersion.toString()); Path toolVersionFile = toolPath.resolve(IdeContext.FILE_SOFTWARE_VERSION); FileAccess fileAccess = this.context.getFileAccess(); if (Files.isDirectory(toolPath)) { if (Files.exists(toolVersionFile)) { - if (this.context.isForceMode()) { - fileAccess.delete(toolPath); - } else { - this.context.debug("Version {} of tool {} is already installed at {}", resolvedVersion, getToolWithEdition(this.tool, edition), toolPath); - return createToolInstallation(toolPath, resolvedVersion, toolVersionFile); - } + this.context.debug("Version {} of tool {} is already installed at {}", resolvedVersion, getToolWithEdition(this.tool, edition), toolPath); + return createToolInstallation(toolPath, resolvedVersion, toolVersionFile); } else { - this.context.warning("Deleting corrupted installation at {}", toolPath); - fileAccess.delete(toolPath); + this.context.warning("Archiving corrupted installation at {}", toolPath); + fileAccess.backup(toolPath); } } + + if (Files.exists(this.dependency.getDependencyJsonPath(getEdition()))) { + installDependencies(resolvedVersion); + } else { + this.context.trace("No Dependencies file found"); + } + Path target = toolRepository.download(this.tool, edition, resolvedVersion); fileAccess.mkdirs(toolPath.getParent()); boolean extract = isExtract(); @@ -262,13 +259,14 @@ public String getInstalledEdition(Path toolPath) { } + @Override public void uninstall() { try { Path softwarePath = getToolPath(); if (Files.exists(softwarePath)) { try { - context.getFileAccess().delete(softwarePath); + this.context.getFileAccess().delete(softwarePath); this.context.success("Successfully uninstalled " + this.tool); } catch (Exception e) { this.context.error("Couldn't uninstall " + this.tool); @@ -290,13 +288,39 @@ private ToolInstallation createToolInstallation(Path rootDir, VersionIdentifier if (Files.isDirectory(binFolder)) { binDir = binFolder; } - if (linkDir != rootDir) { + if (newInstallation && (linkDir != rootDir)) { assert (!linkDir.equals(rootDir)); this.context.getFileAccess().copy(toolVersionFile, linkDir, FileCopyMode.COPY_FILE_OVERRIDE); + if (this.context.getSystemInfo().isMac()) { + Path macApp = findMacApp(linkDir); + if (macApp != null) { + ProcessContext pc = this.context.newProcess(); + pc.executable("sudo").addArgs("xattr", "-d", "com.apple.quarantine", macApp); + pc.run(); + } + } } return new ToolInstallation(rootDir, linkDir, binDir, resolvedVersion, newInstallation); } + private Path findMacApp(Path path) { + + while (path != null) { + Path fileName = path.getFileName(); + if (fileName == null) { + return null; + } + String filename = fileName.toString(); + if (filename.endsWith(".app")) { + return path; + } else if (filename.equals(IdeContext.FOLDER_CONTENTS)) { + return path.getParent(); + } + path = path.getParent(); + } + return null; + } + private ToolInstallation createToolInstallation(Path rootDir, VersionIdentifier resolvedVersion, Path toolVersionFile) { return createToolInstallation(rootDir, resolvedVersion, toolVersionFile, false); @@ -406,7 +430,7 @@ private void setDependencyEnvironmentPath(String dependencyEnvironmentName, Path protected HashMap listOfDependencyEnvVariableNames() { - return dependenciesEnvVariableNames; + return this.dependenciesEnvVariableNames; } private String getDependencyEnvironmentName(String dependencyName) { From a3c7fe979fdea08fbfb020892b87970d7f38ccfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Hohwiller?= Date: Sat, 6 Jul 2024 01:02:19 +0200 Subject: [PATCH 2/5] code-style cleanup --- cli/src/main/java/com/devonfw/tools/ide/tool/mvn/Mvn.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/mvn/Mvn.java b/cli/src/main/java/com/devonfw/tools/ide/tool/mvn/Mvn.java index adca9a3351..d596bb2269 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/mvn/Mvn.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/mvn/Mvn.java @@ -170,7 +170,7 @@ private void createSettingsFile(Path settingsFile, Path settingsSecurityFile, Pa if (gitSettingsUrl == null) { this.context.warning("Failed to determine git remote URL for settings folder."); - } else if (!gitSettingsUrl.equals(gitContext.DEFAULT_SETTINGS_GIT_URL)) { + } else if (!gitSettingsUrl.equals(GitContext.DEFAULT_SETTINGS_GIT_URL)) { Set variables = findVariables(content); for (String variable : variables) { String secret = getEncryptedPassword(variable); @@ -214,7 +214,7 @@ private Set findVariables(String content) { @Override public void installPlugin(PluginDescriptor plugin) { - Path mavenPlugin = this.getToolPath().resolve("lib/ext/" + plugin.getName() + ".jar"); + Path mavenPlugin = getToolPath().resolve("lib/ext/" + plugin.getName() + ".jar"); this.context.getFileAccess().download(plugin.getUrl(), mavenPlugin); if (Files.exists(mavenPlugin)) { this.context.success("Successfully added {} to {}", plugin.getName(), mavenPlugin.toString()); From 124a8045966bee23257d4381c41e6c3cdd05657a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Hohwiller?= Date: Sat, 6 Jul 2024 12:03:43 +0200 Subject: [PATCH 3/5] #451: improve version resolution and error handling --- .../tools/ide/repo/DefaultToolRepository.java | 4 +- .../tools/ide/tool/ToolCommandlet.java | 13 +++-- .../tools/ide/url/model/UrlMetadata.java | 47 ++++++++++--------- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/cli/src/main/java/com/devonfw/tools/ide/repo/DefaultToolRepository.java b/cli/src/main/java/com/devonfw/tools/ide/repo/DefaultToolRepository.java index c15f44761c..222eb2d9b3 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/repo/DefaultToolRepository.java +++ b/cli/src/main/java/com/devonfw/tools/ide/repo/DefaultToolRepository.java @@ -33,7 +33,7 @@ public String getId() { public VersionIdentifier resolveVersion(String tool, String edition, VersionIdentifier version) { UrlMetadata metadata = this.context.getUrls(); - UrlVersion urlVersion = metadata.getVersionFolder(tool, edition, version); + UrlVersion urlVersion = metadata.getResolvedVersion(tool, edition, version); return urlVersion.getVersionIdentifier(); } @@ -41,7 +41,7 @@ public VersionIdentifier resolveVersion(String tool, String edition, VersionIden protected UrlDownloadFileMetadata getMetadata(String tool, String edition, VersionIdentifier version) { UrlMetadata metadata = this.context.getUrls(); - UrlVersion urlVersion = metadata.getVersionFolder(tool, edition, version); + UrlVersion urlVersion = metadata.getResolvedVersion(tool, edition, version); SystemInfo sys = this.context.getSystemInfo(); UrlDownloadFile urls = urlVersion.getMatchingUrls(sys.getOs(), sys.getArchitecture()); return urls; diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java b/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java index 9e8af67103..da8aa64b0c 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java @@ -278,21 +278,20 @@ public void setVersion(String version) { public void setVersion(VersionIdentifier version, boolean hint) { String edition = getEdition(); - this.context.getUrls().getVersionFolder(tool, edition, version); // CliException is thrown if the version is not existing EnvironmentVariables variables = this.context.getVariables(); EnvironmentVariables settingsVariables = variables.getByType(EnvironmentVariablesType.SETTINGS); - String name = EnvironmentVariables.getToolVersionVariable(this.tool); - VersionIdentifier resolvedVersion = this.context.getUrls().getVersion(this.tool, edition, version); + String versionVariableName = EnvironmentVariables.getToolVersionVariable(this.tool); + VersionIdentifier resolvedVersion = this.context.getUrls().getResolvedVersion(this.tool, edition, version).getVersionIdentifier(); if (version.isPattern()) { this.context.debug("Resolved version {} to {} for tool {}/{}", version, resolvedVersion, this.tool, edition); } - settingsVariables.set(name, resolvedVersion.toString(), false); + settingsVariables.set(versionVariableName, version.toString(), false); settingsVariables.save(); - this.context.info("{}={} has been set in {}", name, version, settingsVariables.getSource()); - EnvironmentVariables declaringVariables = variables.findVariable(name); + this.context.info("{}={} has been set in {}", versionVariableName, version, settingsVariables.getSource()); + EnvironmentVariables declaringVariables = variables.findVariable(versionVariableName); if ((declaringVariables != null) && (declaringVariables != settingsVariables)) { - this.context.warning("The variable {} is overridden in {}. Please remove the overridden declaration in order to make the change affect.", name, + this.context.warning("The variable {} is overridden in {}. Please remove the overridden declaration in order to make the change affect.", versionVariableName, declaringVariables.getSource()); } if (hint) { diff --git a/cli/src/main/java/com/devonfw/tools/ide/url/model/UrlMetadata.java b/cli/src/main/java/com/devonfw/tools/ide/url/model/UrlMetadata.java index 14d64cad2c..36c604d25c 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/url/model/UrlMetadata.java +++ b/cli/src/main/java/com/devonfw/tools/ide/url/model/UrlMetadata.java @@ -46,8 +46,14 @@ public UrlMetadata(IdeContext context) { */ public UrlEdition getEdition(String tool, String edition) { - UrlTool urlTool = this.repository.getOrCreateChild(tool); - UrlEdition urlEdition = urlTool.getOrCreateChild(edition); + UrlTool urlTool = this.repository.getChild(tool); + if (urlTool == null) { + throw new CliException("Could not find tool '" + tool + "' in ide-urls metadata!"); + } + UrlEdition urlEdition = urlTool.getChild(edition); + if (urlEdition == null) { + throw new CliException("Could not find edition '" + edition + "' for tool '" + tool + "' in ide-urls metadata!"); + } return urlEdition; } @@ -101,14 +107,25 @@ private List computeSortedVersions(String tool, String editio * latest version. * @return the latest matching {@link VersionIdentifier} for the given {@code tool} and {@code edition}. */ - public VersionIdentifier getVersion(String tool, String edition, VersionIdentifier version) { + public UrlVersion getResolvedVersion(String tool, String edition, VersionIdentifier version) { if (version == null) { version = VersionIdentifier.LATEST; } - if (!version.isPattern()) { - return version; + UrlEdition urlEdition = getEdition(tool, edition); + VersionIdentifier resolvedVersion = version; + if (version.isPattern()) { + resolvedVersion = resolveVersion(tool, edition, version); } + UrlVersion urlVersion = urlEdition.getChild(resolvedVersion.toString()); + if (urlVersion == null) { + throw new CliException("Version " + version + " for tool " + tool + " does not exist in edition " + edition + "."); + } + return urlVersion; + } + + private VersionIdentifier resolveVersion(String tool, String edition, VersionIdentifier version) { + List versions = getSortedVersions(tool, edition); for (VersionIdentifier vi : versions) { if (version.matches(vi)) { @@ -116,26 +133,10 @@ public VersionIdentifier getVersion(String tool, String edition, VersionIdentifi return vi; } } + // TODO properly consider edition (needs list-versions commandlet enhancement to also support edition) throw new CliException( "Could not find any version matching '" + version + "' for tool '" + tool + "' - potentially there are " + versions.size() + " version(s) available in " - + getEdition(tool, edition).getPath() + " but none matched!"); - } - - /** - * @param tool the name of the {@link UrlTool}. - * @param edition the name of the {@link UrlEdition}. - * @param version the {@link VersionIdentifier} to match. May be a {@link VersionIdentifier#isPattern() pattern}, a specific version or {@code null} for the - * latest version. - * @return the latest matching {@link UrlVersion} for the given {@code tool} and {@code edition}. - */ - public UrlVersion getVersionFolder(String tool, String edition, VersionIdentifier version) { - - VersionIdentifier resolvedVersion = getVersion(tool, edition, version); - UrlVersion urlVersion = getEdition(tool, edition).getChild(resolvedVersion.toString()); - if (urlVersion == null) { - throw new CliException("Version " + version + " for tool " + tool + " does not exist in edition " + edition + "."); - } - return urlVersion; + + getEdition(tool, edition).getPath() + " but none matched! You can get the list of available versions with the following command:\nide list-versions " + tool); } } From 52daa7853deb3f4d840b35ea1532231a9960f27b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Hohwiller?= Date: Sat, 6 Jul 2024 13:10:59 +0200 Subject: [PATCH 4/5] #451: fixed EditionSetCommandletTest --- .../tools/ide/tool/LocalToolCommandlet.java | 3 ++- .../devonfw/tools/ide/tool/ToolCommandlet.java | 1 + .../ide/commandlet/EditionSetCommandletTest.java | 15 +++++++-------- .../_ide/urls/docker/docker/latest/mac_arm64.urls | 1 + .../_ide/urls/docker/docker/latest/mac_x64.urls | 1 + .../urls/docker/docker/latest/windows_x64.urls | 1 + .../urls/docker/rancher/1.14.2/linux_x64.urls | 1 + .../docker/rancher/1.14.2/linux_x64.urls.sha256 | 1 + .../urls/docker/rancher/1.14.2/mac_arm64.urls | 1 + .../docker/rancher/1.14.2/mac_arm64.urls.sha256 | 1 + .../_ide/urls/docker/rancher/1.14.2/mac_x64.urls | 1 + .../docker/rancher/1.14.2/mac_x64.urls.sha256 | 1 + .../urls/docker/rancher/1.14.2/windows_x64.urls | 1 + .../docker/rancher/1.14.2/windows_x64.urls.sha256 | 1 + 14 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/mac_arm64.urls create mode 100644 cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/mac_x64.urls create mode 100644 cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/windows_x64.urls create mode 100644 cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/linux_x64.urls create mode 100644 cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/linux_x64.urls.sha256 create mode 100644 cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_arm64.urls create mode 100644 cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_arm64.urls.sha256 create mode 100644 cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_x64.urls create mode 100644 cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_x64.urls.sha256 create mode 100644 cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/windows_x64.urls create mode 100644 cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/windows_x64.urls.sha256 diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java b/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java index 417c703843..11ab362368 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java @@ -1,6 +1,7 @@ package com.devonfw.tools.ide.tool; import com.devonfw.tools.ide.common.Tag; +import com.devonfw.tools.ide.context.AbstractIdeContext; import com.devonfw.tools.ide.context.IdeContext; import com.devonfw.tools.ide.io.FileAccess; import com.devonfw.tools.ide.io.FileCopyMode; @@ -291,7 +292,7 @@ private ToolInstallation createToolInstallation(Path rootDir, VersionIdentifier if (newInstallation && (linkDir != rootDir)) { assert (!linkDir.equals(rootDir)); this.context.getFileAccess().copy(toolVersionFile, linkDir, FileCopyMode.COPY_FILE_OVERRIDE); - if (this.context.getSystemInfo().isMac()) { + if (this.context.getSystemInfo().isMac() && !((AbstractIdeContext) this.context).isTest()) { Path macApp = findMacApp(linkDir); if (macApp != null) { ProcessContext pc = this.context.newProcess(); diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java b/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java index da8aa64b0c..79585c88fa 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java @@ -12,6 +12,7 @@ import com.devonfw.tools.ide.process.ProcessErrorHandling; import com.devonfw.tools.ide.process.ProcessMode; import com.devonfw.tools.ide.property.StringProperty; +import com.devonfw.tools.ide.url.model.folder.UrlEdition; import com.devonfw.tools.ide.version.VersionIdentifier; import java.nio.file.Files; diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionSetCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionSetCommandletTest.java index 15f51e6140..5686a67195 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionSetCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionSetCommandletTest.java @@ -1,13 +1,11 @@ package com.devonfw.tools.ide.commandlet; import com.devonfw.tools.ide.context.AbstractIdeContextTest; -import com.devonfw.tools.ide.context.IdeContext; import com.devonfw.tools.ide.context.IdeTestContext; import com.devonfw.tools.ide.log.IdeLogLevel; import org.junit.jupiter.api.Test; import java.nio.file.Path; -import java.util.List; /** Integration test of {@link EditionSetCommandlet}. */ public class EditionSetCommandletTest extends AbstractIdeContextTest { @@ -17,17 +15,18 @@ public class EditionSetCommandletTest extends AbstractIdeContextTest { public void testEditionSetCommandletRun() { // arrange - IdeContext context = newContext(PROJECT_BASIC); + IdeTestContext context = newContext(PROJECT_BASIC); EditionSetCommandlet editionSet = context.getCommandletManager().getCommandlet(EditionSetCommandlet.class); - editionSet.tool.setValueAsString("mvn", context); - editionSet.edition.setValueAsString("setEdition", context); + editionSet.tool.setValueAsString("docker", context); + editionSet.edition.setValueAsString("rancher", context); + assertThat(context.getVariables().getToolEdition("docker")).isEqualTo("docker"); // act editionSet.run(); // assert - List logs = ((IdeTestContext) context).level(IdeLogLevel.WARNING).getMessages(); - assertThat(logs).containsExactly("Edition setEdition seems to be invalid"); + assertThat(context.getVariables().getToolEdition("docker")).isEqualTo("rancher"); + assertLogMessage(context, IdeLogLevel.INFO, "DOCKER_EDITION=rancher has been set in SETTINGS@", true); Path settingsIdeProperties = context.getSettingsPath().resolve("ide.properties"); assertThat(settingsIdeProperties).hasContent(""" #******************************************************************************** @@ -52,6 +51,6 @@ public void testEditionSetCommandletRun() { TEST_ARGS9=settings9 TEST_ARGSb=${TEST_ARGS10} settingsb ${TEST_ARGSa} ${TEST_ARGSb} TEST_ARGSc=${TEST_ARGSc} settingsc - MVN_EDITION=setEdition"""); + DOCKER_EDITION=rancher"""); } } \ No newline at end of file diff --git a/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/mac_arm64.urls b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/mac_arm64.urls new file mode 100644 index 0000000000..f67fd2cb57 --- /dev/null +++ b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/mac_arm64.urls @@ -0,0 +1 @@ +https://desktop.docker.com/mac/main/arm64/Docker.dmg diff --git a/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/mac_x64.urls b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/mac_x64.urls new file mode 100644 index 0000000000..ddc76f03ea --- /dev/null +++ b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/mac_x64.urls @@ -0,0 +1 @@ +https://desktop.docker.com/mac/main/amd64/Docker.dmg diff --git a/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/windows_x64.urls b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/windows_x64.urls new file mode 100644 index 0000000000..a91514e91b --- /dev/null +++ b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/docker/latest/windows_x64.urls @@ -0,0 +1 @@ +https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe diff --git a/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/linux_x64.urls b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/linux_x64.urls new file mode 100644 index 0000000000..3745edf9cc --- /dev/null +++ b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/linux_x64.urls @@ -0,0 +1 @@ +https://github.com/rancher-sandbox/rancher-desktop/releases/download/v1.14.2/rancher-desktop-linux-v1.14.2.zip diff --git a/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/linux_x64.urls.sha256 b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/linux_x64.urls.sha256 new file mode 100644 index 0000000000..8410df2f88 --- /dev/null +++ b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/linux_x64.urls.sha256 @@ -0,0 +1 @@ +2d304d3fe0dbf5efe987c2d583feeb607ce9ef507753fcf0a6b1a6b9b2128d1e diff --git a/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_arm64.urls b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_arm64.urls new file mode 100644 index 0000000000..e3511f6835 --- /dev/null +++ b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_arm64.urls @@ -0,0 +1 @@ +https://github.com/rancher-sandbox/rancher-desktop/releases/download/v1.14.2/Rancher.Desktop-1.14.2-mac.aarch64.zip diff --git a/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_arm64.urls.sha256 b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_arm64.urls.sha256 new file mode 100644 index 0000000000..92ed70df7f --- /dev/null +++ b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_arm64.urls.sha256 @@ -0,0 +1 @@ +0ce7cf58fecbf4ea99541f51401f95ba70053b390b51ae98b16265d1a450a517 diff --git a/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_x64.urls b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_x64.urls new file mode 100644 index 0000000000..e370458885 --- /dev/null +++ b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_x64.urls @@ -0,0 +1 @@ +https://github.com/rancher-sandbox/rancher-desktop/releases/download/v1.14.2/Rancher.Desktop-1.14.2.x86_64.dmg diff --git a/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_x64.urls.sha256 b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_x64.urls.sha256 new file mode 100644 index 0000000000..cf87a9ec60 --- /dev/null +++ b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/mac_x64.urls.sha256 @@ -0,0 +1 @@ +e764e335d1475f8bceb3fb6d1d1892b09d3c2bee3f34355ddab8a7e157c87452 diff --git a/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/windows_x64.urls b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/windows_x64.urls new file mode 100644 index 0000000000..cf9728f8a4 --- /dev/null +++ b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/windows_x64.urls @@ -0,0 +1 @@ +https://github.com/rancher-sandbox/rancher-desktop/releases/download/v1.14.2/Rancher.Desktop.Setup.1.14.2.msi diff --git a/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/windows_x64.urls.sha256 b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/windows_x64.urls.sha256 new file mode 100644 index 0000000000..f22248aa2d --- /dev/null +++ b/cli/src/test/resources/ide-projects/basic/_ide/urls/docker/rancher/1.14.2/windows_x64.urls.sha256 @@ -0,0 +1 @@ +01f52b7a1ebcddeda01b6979ce3505b895fdcde2c5b57f18e4f8c4a593618f3f From a6cbea6032796abb5b5abad86c92e94df58020b9 Mon Sep 17 00:00:00 2001 From: jan-vcapgemini Date: Mon, 22 Jul 2024 12:40:25 +0200 Subject: [PATCH 5/5] #451: fixed merge issues --- .../devonfw/tools/ide/tool/LocalToolCommandlet.java | 12 ++++++------ .../com/devonfw/tools/ide/tool/ToolCommandlet.java | 6 ++---- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java b/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java index 9853327c8a..c49a1c19b2 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java @@ -38,7 +38,7 @@ public abstract class LocalToolCommandlet extends ToolCommandlet { * * @param context the {@link IdeContext}. * @param tool the {@link #getName() tool name}. - * @param tags the {@link #getTags() tags} classifying the tool. Should be created via {@link Set#of(Object) Set.of} method. + * @param tags the {@link #getTags() tags} classifying the tool. Should be created via {@link Set#of(Object) Set.of} method. */ public LocalToolCommandlet(IdeContext context, String tool, Set tags) { @@ -75,8 +75,8 @@ protected boolean doInstall(boolean silent) { Step step = this.context.newStep(silent, "Install " + this.tool, configuredVersion); try { ToolRepository repository = this.context.getDefaultToolRepository(); - String edition = getEdition(); - VersionIdentifier resolvedVersion = repository.resolveVersion(this.tool, edition , configuredVersion); + String edition = getConfiguredEdition(); + VersionIdentifier resolvedVersion = repository.resolveVersion(this.tool, edition, configuredVersion); if (resolvedVersion.equals(installedVersion)) { IdeLogLevel level = silent ? IdeLogLevel.DEBUG : IdeLogLevel.INFO; this.context.level(level).log("Version {} of tool {} is already installed", installedVersion, getToolWithEdition()); @@ -139,7 +139,7 @@ public ToolInstallation installInRepo(VersionIdentifier version, String edition) * Performs the installation of the {@link #getName() tool} managed by this {@link com.devonfw.tools.ide.commandlet.Commandlet} only in the central software * repository without touching the IDE installation. * - * @param version the {@link VersionIdentifier} requested to be installed. May also be a {@link VersionIdentifier#isPattern() version pattern}. + * @param version the {@link VersionIdentifier} requested to be installed. May also be a {@link VersionIdentifier#isPattern() version pattern}. * @param edition the specific edition to install. * @param toolRepository the {@link ToolRepository} to use. * @return the {@link ToolInstallation} in the central software repository matching the given {@code version}. @@ -168,7 +168,7 @@ public ToolInstallation installInRepo(VersionIdentifier version, String edition, } } - if (Files.exists(this.dependency.getDependencyJsonPath(getEdition()))) { + if (Files.exists(this.dependency.getDependencyJsonPath(getConfiguredEdition()))) { installDependencies(resolvedVersion); } else { this.context.trace("No Dependencies file found"); @@ -288,7 +288,7 @@ public void uninstall() { } private ToolInstallation createToolInstallation(Path rootDir, VersionIdentifier resolvedVersion, Path toolVersionFile, - boolean newInstallation) { + boolean newInstallation) { Path linkDir = getMacOsHelper().findLinkDir(rootDir, getBinaryName()); Path binDir = linkDir; diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java b/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java index 0d836d2504..bbd5f2e50b 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java @@ -17,7 +17,6 @@ import com.devonfw.tools.ide.process.ProcessErrorHandling; import com.devonfw.tools.ide.process.ProcessMode; import com.devonfw.tools.ide.property.StringProperty; -import com.devonfw.tools.ide.url.model.folder.UrlEdition; import com.devonfw.tools.ide.version.VersionIdentifier; /** @@ -279,8 +278,6 @@ public void setVersion(String version) { public void setVersion(VersionIdentifier version, boolean hint) { String edition = getConfiguredEdition(); - this.context.getUrls() - .getVersionFolder(this.tool, edition, version); // CliException is thrown if the version is not existing EnvironmentVariables variables = this.context.getVariables(); EnvironmentVariables settingsVariables = variables.getByType(EnvironmentVariablesType.SETTINGS); @@ -294,7 +291,8 @@ public void setVersion(VersionIdentifier version, boolean hint) { this.context.info("{}={} has been set in {}", versionVariableName, version, settingsVariables.getSource()); EnvironmentVariables declaringVariables = variables.findVariable(versionVariableName); if ((declaringVariables != null) && (declaringVariables != settingsVariables)) { - this.context.warning("The variable {} is overridden in {}. Please remove the overridden declaration in order to make the change affect.", versionVariableName, + this.context.warning("The variable {} is overridden in {}. Please remove the overridden declaration in order to make the change affect.", + versionVariableName, declaringVariables.getSource()); } if (hint) {