This is an automated email from the ASF dual-hosted git repository. mpochatkin pushed a commit to branch IGNITE-27201 in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 18d20272681a6b4d3b0c0f8eac41c982a42540f4 Author: Pochatkin Mikhail <[email protected]> AuthorDate: Fri Jan 9 15:49:15 2026 +0300 Fixes --- .../unit/ItNodeUnitStructureCommandTest.java | 41 +++++++++++++++++++++- .../commands/node/unit/NodeUnitReplCommand.java | 4 ++- .../cli/decorators/UnitStructureDecorator.java | 18 +++++----- .../cli/decorators/UnitStructureDecoratorTest.java | 5 ++- 4 files changed, 54 insertions(+), 14 deletions(-) diff --git a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/unit/ItNodeUnitStructureCommandTest.java b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/unit/ItNodeUnitStructureCommandTest.java index 7231daa375a..9642d4af31a 100644 --- a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/unit/ItNodeUnitStructureCommandTest.java +++ b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/unit/ItNodeUnitStructureCommandTest.java @@ -40,6 +40,24 @@ public class ItNodeUnitStructureCommandTest extends CliIntegrationTest { testFile = Files.createFile(testDirectory.resolve("test.txt")).toString(); Files.createFile(testDirectory.resolve("test2.txt")); Files.createFile(testDirectory.resolve("test3.txt")); + + // Files with special characters + Files.createFile(testDirectory.resolve("file with spaces.txt")); + Files.createFile(testDirectory.resolve("file-with-dashes.txt")); + Files.createFile(testDirectory.resolve("file_with_underscores.txt")); + Files.createFile(testDirectory.resolve("file.multiple.dots.txt")); + Files.createFile(testDirectory.resolve("file(with)parentheses.txt")); + Files.createFile(testDirectory.resolve("UPPERCASE.TXT")); + Files.createFile(testDirectory.resolve("MixedCase.Txt")); + + // Subdirectory with files + Path subDir = Files.createDirectory(testDirectory.resolve("sub-directory")); + Files.createFile(subDir.resolve("nested file.txt")); + Files.createFile(subDir.resolve("nested-file.txt")); + + // Deeply nested directory + Path deepDir = Files.createDirectories(testDirectory.resolve("level1").resolve("level2")); + Files.createFile(deepDir.resolve("deep file.txt")); } @Test @@ -65,6 +83,19 @@ public class ItNodeUnitStructureCommandTest extends CliIntegrationTest { () -> assertOutputContains("test.txt"), () -> assertOutputContains("test2.txt"), () -> assertOutputContains("test3.txt"), + () -> assertOutputContains("file with spaces.txt"), + () -> assertOutputContains("file-with-dashes.txt"), + () -> assertOutputContains("file_with_underscores.txt"), + () -> assertOutputContains("file.multiple.dots.txt"), + () -> assertOutputContains("file(with)parentheses.txt"), + () -> assertOutputContains("UPPERCASE.TXT"), + () -> assertOutputContains("MixedCase.Txt"), + () -> assertOutputContains("sub-directory"), + () -> assertOutputContains("nested file.txt"), + () -> assertOutputContains("nested-file.txt"), + () -> assertOutputContains("level1"), + () -> assertOutputContains("level2"), + () -> assertOutputContains("deep file.txt"), () -> assertOutputContains(" B)") // File size display ); } @@ -90,7 +121,15 @@ public class ItNodeUnitStructureCommandTest extends CliIntegrationTest { this::assertErrOutputIsEmpty, () -> assertOutputContains("test.txt"), () -> assertOutputContains("test2.txt"), - () -> assertOutputContains("test3.txt") + () -> assertOutputContains("test3.txt"), + () -> assertOutputContains("file with spaces.txt"), + () -> assertOutputContains("file-with-dashes.txt"), + () -> assertOutputContains("file_with_underscores.txt"), + () -> assertOutputContains("file.multiple.dots.txt"), + () -> assertOutputContains("file(with)parentheses.txt"), + () -> assertOutputContains("sub-directory"), + () -> assertOutputContains("level1"), + () -> assertOutputContains("level2") ); } diff --git a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/unit/NodeUnitReplCommand.java b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/unit/NodeUnitReplCommand.java index 9f364215e92..3c5616b0ea8 100644 --- a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/unit/NodeUnitReplCommand.java +++ b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/unit/NodeUnitReplCommand.java @@ -21,6 +21,8 @@ import org.apache.ignite.internal.cli.commands.BaseCommand; import picocli.CommandLine.Command; /** Manages deployment units on node level in REPL mode. */ -@Command(name = "unit", subcommands = {NodeUnitListReplCommand.class, NodeUnitStructureReplCommand.class}, description = "Manages deployment units") +@Command(name = "unit", + subcommands = {NodeUnitListReplCommand.class, NodeUnitStructureReplCommand.class}, + description = "Manages deployment units") public class NodeUnitReplCommand extends BaseCommand { } diff --git a/modules/cli/src/main/java/org/apache/ignite/internal/cli/decorators/UnitStructureDecorator.java b/modules/cli/src/main/java/org/apache/ignite/internal/cli/decorators/UnitStructureDecorator.java index f2e5c9fae90..868a9cab736 100644 --- a/modules/cli/src/main/java/org/apache/ignite/internal/cli/decorators/UnitStructureDecorator.java +++ b/modules/cli/src/main/java/org/apache/ignite/internal/cli/decorators/UnitStructureDecorator.java @@ -47,7 +47,7 @@ public class UnitStructureDecorator implements Decorator<UnitFolder, TerminalOut if (plain) { renderPlain(data, sb, ""); } else { - sb.append(data.getName()).append("\n"); + sb.append(data.getName()).append('\n'); renderTree(data.getChildren(), sb, ""); } @@ -73,12 +73,12 @@ public class UnitStructureDecorator implements Decorator<UnitFolder, TerminalOut if (actualInstance instanceof UnitFile) { UnitFile file = (UnitFile) actualInstance; - sb.append(prefix).append(connector).append(file.getName()); - sb.append(" (").append(readableSize(file.getSize(), false)).append(")"); - sb.append("\n"); + sb.append(prefix).append(connector).append(file.getName()) + .append(" (").append(readableSize(file.getSize(), false)).append(')') + .append('\n'); } else if (actualInstance instanceof UnitFolder) { UnitFolder folder = (UnitFolder) actualInstance; - sb.append(prefix).append(connector).append(folder.getName()).append("\n"); + sb.append(prefix).append(connector).append(folder.getName()).append('\n'); String newPrefix = prefix + (isLast ? TREE_SPACE : TREE_VERTICAL); renderTree(folder.getChildren(), sb, newPrefix); } @@ -105,11 +105,11 @@ public class UnitStructureDecorator implements Decorator<UnitFolder, TerminalOut UnitFile file = (UnitFile) actualInstance; sb.append(prefix); if (!prefix.isEmpty()) { - sb.append("/"); + sb.append('/'); } - sb.append(file.getName()); - sb.append(" ").append(file.getSize()); - sb.append("\n"); + sb.append(file.getName()) + .append(' ').append(file.getSize()) + .append('\n'); } else if (actualInstance instanceof UnitFolder) { UnitFolder subFolder = (UnitFolder) actualInstance; String newPrefix = prefix.isEmpty() ? subFolder.getName() : prefix + "/" + subFolder.getName(); diff --git a/modules/cli/src/test/java/org/apache/ignite/internal/cli/decorators/UnitStructureDecoratorTest.java b/modules/cli/src/test/java/org/apache/ignite/internal/cli/decorators/UnitStructureDecoratorTest.java index b5e7001a6fc..35cb327bdff 100644 --- a/modules/cli/src/test/java/org/apache/ignite/internal/cli/decorators/UnitStructureDecoratorTest.java +++ b/modules/cli/src/test/java/org/apache/ignite/internal/cli/decorators/UnitStructureDecoratorTest.java @@ -21,6 +21,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; +import java.util.ArrayList; import java.util.List; import org.apache.ignite.rest.client.model.UnitEntry; import org.apache.ignite.rest.client.model.UnitFile; @@ -168,14 +169,12 @@ class UnitStructureDecoratorTest { } private UnitFolder createFolderWithFiles(String name, UnitFile... files) { - List<UnitEntry> children = new java.util.ArrayList<>(); - long totalSize = 0; + List<UnitEntry> children = new ArrayList<>(); for (UnitFile file : files) { UnitEntry entry = new UnitEntry(); entry.setActualInstance(file); children.add(entry); - totalSize += file.getSize(); } return new UnitFolder()
