30 lines
1.1 KiB
C#
30 lines
1.1 KiB
C#
using Microsoft.Extensions.FileSystemGlobbing;
|
|
using Microsoft.Extensions.FileSystemGlobbing.Abstractions;
|
|
|
|
namespace MycroForge.CLI.Commands.Attributes;
|
|
|
|
public class RequiresPluginAttribute : Attribute
|
|
{
|
|
public void RequirePluginProject(string command)
|
|
{
|
|
var currentDirectoryInfo = new DirectoryInfo(Environment.CurrentDirectory);
|
|
var matcher = new Matcher()
|
|
.AddInclude("*.csproj")
|
|
.Execute(new DirectoryInfoWrapper(currentDirectoryInfo));
|
|
|
|
if (!matcher.HasMatches)
|
|
throw new($"Command '{command}' must be run in a command plugin project.");
|
|
|
|
var csprojFileName = $"{new DirectoryInfo(Environment.CurrentDirectory).Name}.csproj";
|
|
|
|
bool IsCsprojFile(FilePatternMatch file)
|
|
{
|
|
return Path.GetFileName(file.Path) == csprojFileName;
|
|
}
|
|
|
|
var hasCsprojFile = matcher.Files.Any(IsCsprojFile);
|
|
|
|
if (!hasCsprojFile)
|
|
throw new($"File '{csprojFileName}' was not found, make sure you're in a command plugin project.");
|
|
}
|
|
} |