| File: Commands\RemoveCommand.cs | Web Access |
| Project: src\aspnetcore\src\Tools\Microsoft.dotnet-openapi\src\Microsoft.dotnet-openapi.csproj (dotnet-openapi) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.IO; using System.Threading.Tasks; using Microsoft.Build.Evaluation; using Microsoft.DotNet.Openapi.Tools; using Microsoft.Extensions.CommandLineUtils; using Microsoft.Extensions.Tools.Internal; namespace Microsoft.DotNet.OpenApi.Commands; internal sealed class RemoveCommand : BaseCommand { private const string CommandName = "remove"; private const string SourceArgName = "source"; public RemoveCommand(Application parent, IHttpClientWrapper httpClient) : base(parent, CommandName, httpClient) { _sourceProjectArg = Argument(SourceArgName, "The OpenAPI reference to remove. Must represent a reference which is already in this project", multipleValues: true); } internal readonly CommandArgument _sourceProjectArg; protected override Task<int> ExecuteCoreAsync() { ArgumentException.ThrowIfNullOrEmpty(_sourceProjectArg.Value); var projectFile = ResolveProjectFile(ProjectFileOption); var sourceFile = _sourceProjectArg.Value; if (IsProjectFile(sourceFile)) { RemoveServiceReference(OpenApiProjectReference, projectFile, sourceFile); } else { var file = RemoveServiceReference(OpenApiReference, projectFile, sourceFile); if (file != null) { File.Delete(GetFullPath(file)); } } return Task.FromResult(0); } private string RemoveServiceReference(string tagName, FileInfo projectFile, string sourceFile) { var project = LoadProject(projectFile); var openApiReferenceItems = project.GetItems(tagName); foreach (ProjectItem item in openApiReferenceItems) { var include = item.EvaluatedInclude; var sourceUrl = item.HasMetadata(SourceUrlAttrName) ? item.GetMetadataValue(SourceUrlAttrName) : null; if (string.Equals(include, sourceFile, StringComparison.OrdinalIgnoreCase) || string.Equals(sourceUrl, sourceFile, StringComparison.OrdinalIgnoreCase)) { project.RemoveItem(item); project.Save(); return include; } } Warning.Write($"No OpenAPI reference was found with the file '{sourceFile}'"); return null; } protected override bool ValidateArguments() { ArgumentException.ThrowIfNullOrEmpty(_sourceProjectArg.Value); return true; } }