Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
27edd93
#1695: initial commit
laim2003 Aug 13, 2026
dc82ff1
#1695: removed code repository flag
laim2003 Aug 14, 2026
9196d21
#1695: Added new helper class to determine the type of a repository.
laim2003 Aug 14, 2026
b7eafb9
#1695: added logic that moves a settings directory to a temp dir, ver…
laim2003 Aug 14, 2026
fc1ca09
#1695: fixed typo
laim2003 Aug 14, 2026
dc5c812
#1695: cleanup of RepositoryUtil
laim2003 Aug 14, 2026
6d44315
#1695: updated CHANGELOG.adoc
laim2003 Aug 14, 2026
ead50be
#1695: cleanup of RepositoryUtil
laim2003 Aug 14, 2026
4cd4abe
#1695: removed help description for --code flag
laim2003 Aug 14, 2026
3c3ddf7
#1695: Updated documentation
laim2003 Aug 14, 2026
5719fc6
Merge branch 'main' into feature/#1695-settings-tempdir-verification
laim2003 Aug 14, 2026
ab99eaa
Merge remote-tracking branch 'origin/feature/#1695-settings-tempdir-v…
laim2003 Aug 14, 2026
2a54e07
#1695: small fixes
laim2003 Aug 17, 2026
6e24291
#1695: added tests
laim2003 Aug 17, 2026
0cdc487
#1695: corrected maven checkstyle recommendations
laim2003 Aug 17, 2026
16098be
#1695: corrected maven checkstyle recommendations
laim2003 Aug 17, 2026
5e42054
Merge remote-tracking branch 'origin/feature/#1695-settings-tempdir-v…
laim2003 Aug 17, 2026
9543028
#1695: formatting corrections
laim2003 Aug 17, 2026
b9ed3e7
Merge branch 'main' into feature/#1695-settings-tempdir-verification
hohwille Aug 21, 2026
03b200a
Merge branch 'main' into feature/#1695-settings-tempdir-verification
hohwille Aug 24, 2026
42dbf05
Merge branch 'main' into feature/#1695-settings-tempdir-verification
laim2003 Aug 25, 2026
ff7e29a
Merge branch 'main' into feature/#1695-settings-tempdir-verification
hohwille Aug 25, 2026
c786c94
Merge remote-tracking branch 'origin/feature/#1695-settings-tempdir-v…
laim2003 Aug 25, 2026
7d11769
#1695: migrated settings update logic into its own class.
laim2003 Aug 26, 2026
e44afae
#1695: migrated settings update logic into SettingsUpdater class, add…
laim2003 Aug 26, 2026
1aa4271
#1695: only create project structure when health check succeeded
laim2003 Aug 26, 2026
80a4715
#1695: extended CliException with isForceRethrowInStep() flag
laim2003 Aug 26, 2026
85a584a
#1695: CreateCommandlet now only creates the project structure after …
laim2003 Aug 26, 2026
81d3d00
#1695: updated RepositoryUtil
laim2003 Aug 26, 2026
5d51ce8
#1695: updated documentation
laim2003 Aug 26, 2026
55d0c0a
#1695: updated CreateCommandlet
laim2003 Aug 26, 2026
af34c90
#1695: divided AbstractUpdateCommandlet settings update step into ver…
laim2003 Aug 26, 2026
0a10bc9
#1695: updated GitContextMock to use the default settings repo URL as…
laim2003 Aug 26, 2026
bae4a08
#1695: updated Step implementation to support isForceRethrow
laim2003 Aug 26, 2026
94725de
#1695: updated tests
laim2003 Aug 26, 2026
d370447
#1695: updated SettingsUpdater to use to stage system of verify&apply…
laim2003 Aug 26, 2026
ce83408
#1695: cleanup
laim2003 Aug 26, 2026
fce29f7
#1695: spotless apply
laim2003 Aug 26, 2026
ca59b00
#1695: finalized verification workflow when no settings repo exists y…
laim2003 Aug 27, 2026
0cb06db
#1695: added warning for invalid Git urls provided via a parameter.
laim2003 Aug 27, 2026
affe458
#1695: small fixes
laim2003 Aug 28, 2026
d9cae42
#1695: - SettingsUpdater now respects force pull settings mode (--for…
laim2003 Aug 28, 2026
0ba64af
Merge branch 'main' into feature/#1695-settings-tempdir-verification
laim2003 Aug 28, 2026
796b275
#1695: - Small fixes of force mode handling in SettingsUpdater for th…
laim2003 Aug 28, 2026
b0868a3
Merge remote-tracking branch 'origin/feature/#1695-settings-tempdir-v…
laim2003 Aug 28, 2026
79da202
#1695: added javadocs
laim2003 Aug 28, 2026
9dd9cb6
#1695: resolved checkstyle violations
laim2003 Aug 28, 2026
ad28a7a
#1695: - fixed SettingsUpdater not recognizing context.isForceMode()
laim2003 Aug 28, 2026
737bd78
Merge branch 'main' into feature/#1695-settings-tempdir-verification
hohwille Aug 31, 2026
6da3b3a
#1695: initial commit
laim2003 Aug 13, 2026
cecb1c3
#1695: removed code repository flag
laim2003 Aug 14, 2026
dd8e217
#1695: Added new helper class to determine the type of a repository.
laim2003 Aug 14, 2026
4812153
#1695: added logic that moves a settings directory to a temp dir, ver…
laim2003 Aug 14, 2026
c145c22
#1695: fixed typo
laim2003 Aug 14, 2026
3b0e1d2
#1695: cleanup of RepositoryUtil
laim2003 Aug 14, 2026
c2b3830
#1695: updated CHANGELOG.adoc
laim2003 Aug 14, 2026
429f05a
#1695: cleanup of RepositoryUtil
laim2003 Aug 14, 2026
5d13b4a
#1695: removed help description for --code flag
laim2003 Aug 14, 2026
d615252
#1695: Updated documentation
laim2003 Aug 14, 2026
e7d975b
#1695: small fixes
laim2003 Aug 17, 2026
c930660
#1695: added tests
laim2003 Aug 17, 2026
b8bb02f
#1695: corrected maven checkstyle recommendations
laim2003 Aug 17, 2026
55d081a
#1695: formatting corrections
laim2003 Aug 17, 2026
2d766dd
#1695: migrated settings update logic into its own class.
laim2003 Aug 26, 2026
5f6b492
#1695: migrated settings update logic into SettingsUpdater class, add…
laim2003 Aug 26, 2026
1ce3a98
#1695: only create project structure when health check succeeded
laim2003 Aug 26, 2026
572892d
#1695: extended CliException with isForceRethrowInStep() flag
laim2003 Aug 26, 2026
0c99b28
#1695: CreateCommandlet now only creates the project structure after …
laim2003 Aug 26, 2026
2edfe0e
#1695: updated RepositoryUtil
laim2003 Aug 26, 2026
496d09d
#1695: updated documentation
laim2003 Aug 26, 2026
9aecc40
#1695: updated CreateCommandlet
laim2003 Aug 26, 2026
c2aaaa0
#1695: divided AbstractUpdateCommandlet settings update step into ver…
laim2003 Aug 26, 2026
669bf24
#1695: updated GitContextMock to use the default settings repo URL as…
laim2003 Aug 26, 2026
6c1c123
#1695: updated Step implementation to support isForceRethrow
laim2003 Aug 26, 2026
71e74e1
#1695: updated tests
laim2003 Aug 26, 2026
0e1433e
#1695: updated SettingsUpdater to use to stage system of verify&apply…
laim2003 Aug 26, 2026
6311e68
#1695: cleanup
laim2003 Aug 26, 2026
c67aabe
#1695: spotless apply
laim2003 Aug 26, 2026
4deda90
#1695: finalized verification workflow when no settings repo exists y…
laim2003 Aug 27, 2026
ec9d3c2
#1695: added warning for invalid Git urls provided via a parameter.
laim2003 Aug 27, 2026
129095d
#1695: small fixes
laim2003 Aug 28, 2026
9e1da14
#1695: - SettingsUpdater now respects force pull settings mode (--for…
laim2003 Aug 28, 2026
8892e88
#1695: - Small fixes of force mode handling in SettingsUpdater for th…
laim2003 Aug 28, 2026
927328b
#1695: added javadocs
laim2003 Aug 28, 2026
2b8c940
#1695: resolved checkstyle violations
laim2003 Aug 28, 2026
94e5664
#1695: - fixed SettingsUpdater not recognizing context.isForceMode()
laim2003 Aug 28, 2026
4aa4c58
Merge remote-tracking branch 'origin/feature/#1695-settings-tempdir-v…
laim2003 Aug 31, 2026
938b956
#1695: - fixed faulty type determination check in RepositoryUtil
laim2003 Aug 31, 2026
32b1819
#1695: - javadoc adjustment
laim2003 Aug 31, 2026
5aca16e
#1695: - fixed issue with IDEW_HOME/conf folder being created by setI…
laim2003 Aug 31, 2026
1ea6d9f
Merge branch 'main' into feature/#1695-settings-tempdir-verification
laim2003 Aug 31, 2026
a54bd8d
Merge remote-tracking branch 'origin/feature/#1695-settings-tempdir-v…
laim2003 Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@ This file documents all notable changes to https://github.com/devonfw/IDEasy[IDE
== 2026.09.002

Release with new features and bugfixes:

* https://github.com/devonfw/IDEasy/issues/1695[#1695]: Project creation logic extended with health checks and removed `--code` flag.

The full list of changes for this release can be found in https://github.com/devonfw/IDEasy/milestone/50?closed=1[milestone 2026.09.002].

== 2026.09.001

Release with new features and bugfixes:

* https://github.com/devonfw/IDEasy/issues/1695[#1695]: Project creation logic extended with health checks and removed `--code` flag.
* https://github.com/devonfw/IDEasy/issues/1525[#1525]: Document known issue and workaround for lombok plugin in Eclipse
* https://github.com/devonfw/IDEasy/issues/1031[#1031]: Added OpenRewrite commandlet
* https://github.com/devonfw/IDEasy/issues/2361[#2361]: Improve dotnet installation by setting DOTNET_ROOT
Expand Down
11 changes: 11 additions & 0 deletions cli/src/main/java/com/devonfw/tools/ide/cli/CliException.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,15 @@ public int getExitCode() {
return this.exitCode;
}

/**
* @return {@code true} if this exception has to be re-thrown from a {@link com.devonfw.tools.ide.step.Step Step} even if that {@code Step} was not asked to
* re-throw errors, {@code false} otherwise (default). A regular error only makes the according {@code Step} fail while the overall process continues with
* the next step. However, if a critical guardrail was violated (e.g. no valid settings could be established) continuing makes no sense and the entire
* process has to be aborted.
*/
public boolean isForceRethrowInStep() {

return false;
}

}
36 changes: 36 additions & 0 deletions cli/src/main/java/com/devonfw/tools/ide/cli/CliFatalException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.devonfw.tools.ide.cli;

/**
* {@link CliException} that aborts the entire CLI process when a critical guardrail fails (e.g. the settings repository could not be cloned or is not a valid
* settings repository). Unlike a regular error that only makes the current {@link com.devonfw.tools.ide.step.Step Step} fail while the overall process
* continues, this exception {@link #isForceRethrowInStep() is always re-thrown} so no further step is executed in an invalid state.
*/
public final class CliFatalException extends CliException {

/**
* The constructor.
*
* @param message the {@link #getMessage() message}.
*/
public CliFatalException(String message) {

super(message);
}

/**
* The constructor.
*
* @param message the {@link #getMessage() message}.
* @param cause the {@link #getCause() cause}.
*/
public CliFatalException(String message, Throwable cause) {

super(message, cause);
}

@Override
public boolean isForceRethrowInStep() {

return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.devonfw.tools.ide.cli.CliArgument;
import com.devonfw.tools.ide.cli.CliArguments;
import com.devonfw.tools.ide.commandlet.cleanup.CleanupCommandlet;
import com.devonfw.tools.ide.commandlet.update.UpdateCommandlet;
import com.devonfw.tools.ide.completion.CompletionCandidateCollector;
import com.devonfw.tools.ide.context.IdeContext;
import com.devonfw.tools.ide.git.repository.RepositoryCommandlet;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.devonfw.tools.ide.commandlet.update.AbstractUpdateCommandlet;
import com.devonfw.tools.ide.context.IdeContext;
import com.devonfw.tools.ide.io.FileAccess;
import com.devonfw.tools.ide.log.IdeLogLevel;
import com.devonfw.tools.ide.property.FlagProperty;
import com.devonfw.tools.ide.property.StringProperty;
import com.devonfw.tools.ide.version.IdeVersion;

Expand All @@ -24,9 +24,6 @@ public class CreateCommandlet extends AbstractUpdateCommandlet {
/** {@link StringProperty} for the name of the new project */
public final StringProperty newProject;

/** {@link FlagProperty} for creating a project with settings inside a code repository */
public final FlagProperty codeRepositoryFlag;

/**
* The constructor.
*
Expand All @@ -36,7 +33,6 @@ public CreateCommandlet(IdeContext context) {

super(context);
this.newProject = add(new StringProperty("", true, "project"));
this.codeRepositoryFlag = add(new FlagProperty("--code"));
add(this.settingsRepo);
}

Expand All @@ -55,42 +51,43 @@ public boolean isIdeHomeRequired() {
@Override
protected void doRun() {

String newProjectName = this.newProject.getValue();
Path newProjectPath = this.context.getIdeRoot().resolve(newProjectName);

Path newProjectPath = getNewProjectPath();
LOG.info("Creating new IDEasy project in {}", newProjectPath);
if (!this.context.getFileAccess().isEmptyDir(newProjectPath)) {
FileAccess fileAccess = this.context.getFileAccess();
if (!fileAccess.isEmptyDir(newProjectPath)) {
this.context.askToContinue("Directory {} already exists. Do you want to continue?", newProjectPath);
} else {
this.context.getFileAccess().mkdirs(newProjectPath);
fileAccess.backup(newProjectPath);
}

initializeProject(newProjectPath);
this.context.setIdeHome(newProjectPath);
super.doRun();
this.context.getFileAccess().writeFileContent(IdeVersion.getVersionString(), newProjectPath.resolve(IdeContext.FILE_SOFTWARE_VERSION));
IdeLogLevel.SUCCESS.log(LOG, "Successfully created new project '{}'.", newProjectName);

IdeLogLevel.SUCCESS.log(LOG, "Successfully created new project '{}'.", this.newProject.getValue());
logWelcomeMessage();
}

private void initializeProject(Path newInstancePath) {
@Override
protected void onSettingHealthCheckFinished() {

// only called after the settings passed the health check
Path newProjectPath = getNewProjectPath();

FileAccess fileAccess = this.context.getFileAccess();
fileAccess.mkdirs(newInstancePath.resolve(IdeContext.FOLDER_SOFTWARE));
fileAccess.mkdirs(newInstancePath.resolve(IdeContext.FOLDER_PLUGINS));
fileAccess.mkdirs(newInstancePath.resolve(IdeContext.FOLDER_WORKSPACES).resolve(IdeContext.WORKSPACE_MAIN));
fileAccess.mkdirs(newProjectPath);
this.context.setIdeHome(newProjectPath);
fileAccess.mkdirs(newProjectPath.resolve(IdeContext.FOLDER_SOFTWARE));
fileAccess.mkdirs(newProjectPath.resolve(IdeContext.FOLDER_PLUGINS));
fileAccess.mkdirs(newProjectPath.resolve(IdeContext.FOLDER_WORKSPACES).resolve(IdeContext.WORKSPACE_MAIN));
}

@Override
protected boolean isCodeRepository() {
return this.codeRepositoryFlag.isTrue();
private Path getNewProjectPath() {

return this.context.getIdeRoot().resolve(this.newProject.getValue());
}

@Override
protected String getStepMessage() {

return "Create (clone) " + (isCodeRepository() ? "code" : "settings") + " repository";
return "Create (clone) repository";
}

private void logWelcomeMessage() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ private void logSettingsGitStatus() {
} else {
GitContext gitContext = this.context.getGitContext();
if (gitContext.isRepositoryUpdateAvailable(settingsPath, this.context.getSettingsCommitIdPath())) {
if (!this.context.isSettingsCodeRepository()) {
if (!this.context.isCombinedSettingsCodeRepository()) {
LOG.warn("Your settings are not up-to-date, please run 'ide update'.");
}
} else {
Expand Down
Loading
Loading