using System.CommandLine; using MycroForge.CLI.Commands.Attributes; using MycroForge.Core; using MycroForge.Core.Contract; namespace MycroForge.CLI.Commands; public partial class MycroForge { [RequiresVenv] public class Uninstall : Command, ISubCommandOf { private static readonly Argument> PackagesArgument = new(name: "packages", description: "The names of the packages to uninstall"); private static readonly Option YesOption = new(aliases: ["-y", "--yes"], description: "Don’t ask for confirmation of uninstall deletions"); private readonly ProjectContext _context; public Uninstall(ProjectContext context) : base("uninstall", "Uninstall packages and update the requirements.txt") { _context = context; AddAlias("u"); AddArgument(PackagesArgument); AddOption(YesOption); this.SetHandler(ExecuteAsync, PackagesArgument, YesOption); } private async Task ExecuteAsync(IEnumerable packages, bool yes) { var packs = packages.ToArray(); if (packs.Length == 0) { Console.WriteLine("'m4g uninstall' requires at least one package."); return; } await _context.Bash( "source .venv/bin/activate", $"pip uninstall{(yes ? " --yes " : " ")}{string.Join(' ', packs)}", "pip freeze > requirements.txt" ); } } }