47 lines
1.6 KiB
C#
47 lines
1.6 KiB
C#
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<MycroForge>
|
||
{
|
||
private static readonly Argument<IEnumerable<string>> PackagesArgument =
|
||
new(name: "packages", description: "The names of the packages to uninstall");
|
||
|
||
private static readonly Option<bool> 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<string> 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"
|
||
);
|
||
}
|
||
}
|
||
} |