From 4fbdf3df235611a94c216b20e116b514ef8cf3e3 Mon Sep 17 00:00:00 2001 From: HardCodeDev Date: Thu, 22 Jan 2026 21:19:16 +0400 Subject: [PATCH 1/2] Add Reset Project command --- .gitignore | 1 + src/ucll/Program.cs | 8 +++ src/ucll/ResetProject/ResetProjectCommand.cs | 65 +++++++++++++++++++ src/ucll/ResetProject/ResetProjectSettings.cs | 12 ++++ 4 files changed, 86 insertions(+) create mode 100644 src/ucll/ResetProject/ResetProjectCommand.cs create mode 100644 src/ucll/ResetProject/ResetProjectSettings.cs diff --git a/.gitignore b/.gitignore index f3eb4dc..973ff0b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.vs/ .idea/ vm/ diff --git a/src/ucll/Program.cs b/src/ucll/Program.cs index 7b938f6..2db3c89 100644 --- a/src/ucll/Program.cs +++ b/src/ucll/Program.cs @@ -95,6 +95,14 @@ .WithExample("uninstall-unused", "--yes") .WithExample("uninstall-unused", "--dry-run"); + config.AddCommand("reset-project") + .WithDescription("Reset Unity project by deleting cache files and folders") + .WithExample("reset-project") + .WithExample("reset-project", "--yes") + .WithExample("reset-project", "--dry-run") + .WithExample("reset-project", "--favorite") + .WithExample("reset-project", "searchPath"); + config.AddCommand("upm-git-url") .WithDescription("Generate a git URL for Unity Package Manager from a Unity project") .WithExample("upm-git-url") diff --git a/src/ucll/ResetProject/ResetProjectCommand.cs b/src/ucll/ResetProject/ResetProjectCommand.cs new file mode 100644 index 0000000..7beb50b --- /dev/null +++ b/src/ucll/ResetProject/ResetProjectCommand.cs @@ -0,0 +1,65 @@ +internal class ResetProjectCommand(UnityHub unityHub) : SearchPathCommand(unityHub) +{ + protected override int ExecuteImpl(ResetProjectSettings settings) + { + string searchPath = ResolveSearchPath(settings.SearchPath, settings.Favorite); + ProjectInfo info = Project.Parse(searchPath); + + var resetTargets = new HashSet(StringComparer.OrdinalIgnoreCase) + { + "Assets", "Packages", "ProjectSettings", + }; + + bool shouldReset = settings.Yes || AnsiConsole.Confirm( + "Do you want to reset this project?", + defaultValue: false); + + if (!shouldReset) + { + throw new UserCancelledException("Resetting cancelled."); + } + + AnsiConsole.WriteLine(); + + try + { + foreach (string item in Directory.GetFileSystemEntries(info.Path)) + { + string itemName = Path.GetFileName(item); + + if (resetTargets.Contains(itemName)) continue; + + if (settings.DryRun) + { + AnsiConsole.MarkupLine($"[dim]Would delete: {Markup.Escape(itemName)}[/]"); + } + else + { + if (Directory.Exists(item)) + { + AnsiConsole.MarkupLine($"[bold]Deleting directory {Markup.Escape(itemName)}...[/]"); + + Directory.Delete(item, true); + + WriteSuccess($"Directory {Markup.Escape(item)} deleted successfully."); + } + else if (File.Exists(item)) + { + AnsiConsole.MarkupLine($"[bold]Deleting file {Markup.Escape(itemName)}...[/]"); + + File.Delete(item); + + WriteSuccess($"File {Markup.Escape(itemName)} deleted successfully."); + } + } + } + } + catch (Exception ex) + { + WriteError($"Failed to reset this project: {ex.Message}"); + } + + WriteSuccess("Resetting process completed."); + return 0; + } +} \ No newline at end of file diff --git a/src/ucll/ResetProject/ResetProjectSettings.cs b/src/ucll/ResetProject/ResetProjectSettings.cs new file mode 100644 index 0000000..f88488f --- /dev/null +++ b/src/ucll/ResetProject/ResetProjectSettings.cs @@ -0,0 +1,12 @@ +using System.ComponentModel; + +internal class ResetProjectSettings : MutatingSettings +{ + [CommandArgument(0, "[searchPath]")] + [Description(Descriptions.SearchPath)] + public string? SearchPath { get; init; } + + [CommandOption("-f|--favorite|--favorites")] + [Description(Descriptions.Favorite)] + public bool Favorite { get; init; } +} \ No newline at end of file From 10ffcc2ce1d170cec9b9fe691ea138b3900e5853 Mon Sep 17 00:00:00 2001 From: HardCodeDev Date: Thu, 22 Jan 2026 21:20:36 +0400 Subject: [PATCH 2/2] Fix directory --- src/ucll/{ => Commands}/ResetProject/ResetProjectCommand.cs | 0 src/ucll/{ => Commands}/ResetProject/ResetProjectSettings.cs | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/ucll/{ => Commands}/ResetProject/ResetProjectCommand.cs (100%) rename src/ucll/{ => Commands}/ResetProject/ResetProjectSettings.cs (100%) diff --git a/src/ucll/ResetProject/ResetProjectCommand.cs b/src/ucll/Commands/ResetProject/ResetProjectCommand.cs similarity index 100% rename from src/ucll/ResetProject/ResetProjectCommand.cs rename to src/ucll/Commands/ResetProject/ResetProjectCommand.cs diff --git a/src/ucll/ResetProject/ResetProjectSettings.cs b/src/ucll/Commands/ResetProject/ResetProjectSettings.cs similarity index 100% rename from src/ucll/ResetProject/ResetProjectSettings.cs rename to src/ucll/Commands/ResetProject/ResetProjectSettings.cs