diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 83ddd07f5..0d2d0b597 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -135,7 +135,7 @@ jobs: * Mac(x64): https://repo1.maven.org/maven2/com/devonfw/tools/IDEasy/ide-cli/${current_version}/ide-cli-${current_version}-mac-x64.tar.gz * Linux: https://repo1.maven.org/maven2/com/devonfw/tools/IDEasy/ide-cli/${current_version}/ide-cli-${current_version}-linux-x64.tar.gz # Changes - https://github.com/devonfw/IDEasy/blob/main/CHANGELOG.asciidoc#${noDotVersion}" + https://github.com/devonfw/IDEasy/blob/main/CHANGELOG.adoc#${noDotVersion/-beta/}" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} BUILD_USER: ${{ secrets.BUILD_USER }} diff --git a/.mvn/maven.config b/.mvn/maven.config index 9245cbb8e..5bb4c98c8 100644 --- a/.mvn/maven.config +++ b/.mvn/maven.config @@ -1 +1 @@ --Drevision=2024.11.001-beta-SNAPSHOT +-Drevision=2024.12.001-beta-SNAPSHOT diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 23d414538..b35d458d6 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -2,6 +2,13 @@ This file documents all notable changes to https://github.com/devonfw/IDEasy[IDEasy]. +== 2024.12.001 + +Release with new features and bugfixes: + + +The full list of changes for this release can be found in https://github.com/devonfw/IDEasy/milestone/16?closed=1[milestone 2024.12.001]. + == 2024.11.001 Release with new features and bugfixes: diff --git a/cli/src/main/java/com/devonfw/tools/ide/context/AbstractIdeContext.java b/cli/src/main/java/com/devonfw/tools/ide/context/AbstractIdeContext.java index 056bd3945..42c24ecb2 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/context/AbstractIdeContext.java +++ b/cli/src/main/java/com/devonfw/tools/ide/context/AbstractIdeContext.java @@ -247,10 +247,8 @@ public void setCwd(Path userDir, String workspace, Path ideHome) { this.userHomeIde = this.userHome.resolve(".ide"); this.downloadPath = this.userHome.resolve("Downloads/ide"); - this.variables = createVariables(); this.path = computeSystemPath(); this.customToolRepository = CustomToolRepositoryImpl.of(this); - this.workspaceMerger = new DirectoryMerger(this); } private String getMessageIdeHomeFound() { @@ -498,6 +496,9 @@ public SystemPath getPath() { @Override public EnvironmentVariables getVariables() { + if (this.variables == null) { + this.variables = createVariables(); + } return this.variables; } @@ -571,6 +572,9 @@ public Locale getLocale() { @Override public DirectoryMerger getWorkspaceMerger() { + if (this.workspaceMerger == null) { + this.workspaceMerger = new DirectoryMerger(this); + } return this.workspaceMerger; } @@ -1054,6 +1058,6 @@ public IdeStartContextImpl getStartContext() { * Reloads this context and re-initializes the {@link #getVariables() variables}. */ public void reload() { - this.variables = createVariables(); + this.variables = null; } } diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/GlobalToolCommandlet.java b/cli/src/main/java/com/devonfw/tools/ide/tool/GlobalToolCommandlet.java index 8bcd676e5..bd5716a55 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/GlobalToolCommandlet.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/GlobalToolCommandlet.java @@ -147,12 +147,11 @@ public boolean install(boolean silent, EnvironmentContext environmentContext) { fileAccess.delete(tmpDir); } if (exitCode == 0) { - this.context.success("Successfully installed {} in version {}", this.tool, resolvedVersion); + this.context.success("Installation process for {} in version {} has started", this.tool, resolvedVersion); } else { this.context.warning("{} in version {} was not successfully installed", this.tool, resolvedVersion); return false; } - postInstall(); return true; } 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 009ef5187..08614fc7b 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 @@ -116,6 +116,27 @@ public final boolean install(boolean silent, EnvironmentContext environmentConte } + /** + * This method is called after a tool was requested to be installed or updated. + * + * @param newlyInstalled {@code true} if the tool was installed or updated (at least link to software folder was created/updated), {@code false} otherwise + * (configured version was already installed and nothing changed). + */ + protected void postInstall(boolean newlyInstalled) { + + if (newlyInstalled) { + postInstall(); + } + } + + /** + * This method is called after the tool has been newly installed or updated to a new version. + */ + protected void postInstall() { + + // nothing to do by default + } + private boolean toolAlreadyInstalled(boolean silent, VersionIdentifier installedVersion, Step step) { if (!silent) { this.context.info("Version {} of tool {} is already installed", installedVersion, getToolWithEdition()); 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 9485bd027..a20bc0eb9 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 @@ -233,27 +233,6 @@ public boolean install(boolean silent) { */ public abstract boolean install(boolean silent, EnvironmentContext environmentContext); - /** - * This method is called after a tool was requested to be installed or updated. - * - * @param newlyInstalled {@code true} if the tool was installed or updated (at least link to software folder was created/updated), {@code false} otherwise - * (configured version was already installed and nothing changed). - */ - protected void postInstall(boolean newlyInstalled) { - - if (newlyInstalled) { - postInstall(); - } - } - - /** - * This method is called after the tool has been newly installed or updated to a new version. - */ - protected void postInstall() { - - // nothing to do by default - } - /** * @return {@code true} to extract (unpack) the downloaded binary file, {@code false} otherwise. */ diff --git a/documentation/configuration.adoc b/documentation/configuration.adoc index 406cd5e76..3b48167f2 100644 --- a/documentation/configuration.adoc +++ b/documentation/configuration.adoc @@ -11,7 +11,7 @@ The following list shows these configuration files in the order they are loaded 2. `~/.ide/ide.properties` - user specific global defaults (on Windows in `%USERPROFILE%/.ide/ide.properties`) 3. `https://github.com/devonfw/ide-settings/blob/main/ide.properties[settings/ide.properties]` (`settings/ide.properties`) - project specific configurations from link:settings.adoc[settings]. 4. `workspaces/${WORKSPACE}/ide.properties` - optional workspace specific configurations (especially helpful in projects using docker). -5. `https://github.com/devonfw/ide-settings/blob/main/template/conf/ide.properties[conf/ide.properties]` - user specific configurations (e.g. `M2_REPO=~/.m2/repository`). +5. `https://github.com/devonfw/ide-settings/blob/main/templates/conf/ide.properties[conf/ide.properties]` - user specific configurations (e.g. `M2_REPO=~/.m2/repository`). During setup this file is created by copying a template from `settings/template/conf/ide.properties`. == ide.properties diff --git a/documentation/sandbox.adoc b/documentation/sandbox.adoc index c263ca642..f2e49ec55 100644 --- a/documentation/sandbox.adoc +++ b/documentation/sandbox.adoc @@ -6,7 +6,7 @@ With IDEasy we follow the sandbox principle for the projects managed by our tool That is each project may peacefully coexist with other projects on the same computer. Changes and work in one project do not have side-effects to other projects so the projects are isolated from each other. -This principle is not very easy to archive on the same computer since you have to consider the following requirements. +This principle is not very easy to achieve on the same computer since you have to consider the following requirements. Different projects on the same computer... * ... may want to use the same tool (`java`, `mvn`, `node`, `python`, you name it). @@ -17,7 +17,7 @@ You do not want to accidentally deploy something for the wrong account because y == Concept -There are differnet concepts and implementations how to archive this sandbox principle. +There are differnet concepts and implementations how to achieve this sandbox principle. An obvious one is virtualization (using VMs) or para-virtualization (using "docker" containers). Microsoft is using the latter with https://containers.dev/[development containers]. However, from the start we belived that developers want the following things: diff --git a/documentation/usage.adoc b/documentation/usage.adoc index 5626cabe2..61cbdcff7 100644 --- a/documentation/usage.adoc +++ b/documentation/usage.adoc @@ -39,7 +39,7 @@ If you are working on different branches in parallel you typically want to use m . Go to the link:workspaces.adoc[workspaces] folder in your link:variables.adoc[${IDE_HOME}] and create a new folder with the name of your choice (e.g. `release2.1`). . Check out (`git clone ...`) the according projects and branch into that workspace folder. -. Open a shell in that new workspace folder (`cd` to it) and according to your IDE run e.g. link:eclipse.adoc[eclipse], link:vscode.adoc[vscode], or link:intellij.adoc[intellij] to create your workspace and launch the IDE. +. Open a shell in that new workspace folder (`cd` to it) and according to your IDE run e.g. `eclipse`, `vscode`, or `intellij` to create your workspace and launch the IDE. You can also add the parameter `create-script` to the IDE link:cli.adoc#commandlets[commandlet] in order to create a launch-script for your IDE. You can have multiple instances of eclipse running for each workspace in parallel. @@ -86,11 +86,11 @@ This way you will take over control of the tools and their versions for every de . In case you need a proprietary or unsupported tool, you can study link:software.adoc#custom[how to include custom tools]. . In case you have very restrictive policies about downloading tools from the internet, you can create and configure a link:software.adoc#repository[software repository] for your project or company. . Some of the tools (especially the actual IDEs) allow extensions via plugins. -You can customize them to your needs for link:eclipse.adoc#plugins[eclipse], link:vscode.adoc#plugins[VS code], or link:intellij.adoc#plugins[intelliJ]. -. In your `settings` git repository you will find a `projects` folder. -Here you will find configurations files for every git project relevant for your actual project. -Feel free to create new projects for your needs and delete the `devonfw` specific default projects. -The link:projects.adoc[projects] documentation will explain you how to do this. +You can customize them to your needs for https://github.com/devonfw/ide-settings/tree/main/eclipse/plugins[eclipse], https://github.com/devonfw/ide-settings/tree/main/vscode/plugins[VS code], or https://github.com/devonfw/ide-settings/tree/main/intellij/plugins[intelliJ]. +. In your `settings` git repository you will find a `repositories` folder. +Here you will find configurations files for every git repository relevant for your actual development project (with your source-code). +Feel free to create new repositories for your needs and delete the included default repositories. +The link:repository.adoc[repository] documentation will explain you how to do this. . For every IDE you will also find an according folder in your `settings` git repository. Here are the individual configuration settings for that IDE. You can change them by directly editing the according configuration files directly with a text-editor in your `settings` git repository.