Skip to content

Commit 760445c

Browse files
Merge pull request #1108 from microsoft/mk/terminate-process
Enable termination of Hidi processes through pressing the breaking key combinations
2 parents 8ce4ec5 + 4a163a6 commit 760445c

File tree

4 files changed

+18
-17
lines changed

4 files changed

+18
-17
lines changed

src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public async Task<int> InvokeAsync(InvocationContext context)
5050
string filterbyoperationids = context.ParseResult.GetValueForOption(FilterByOperationIdsOption);
5151
string filterbytags = context.ParseResult.GetValueForOption(FilterByTagsOption);
5252
string filterbycollection = context.ParseResult.GetValueForOption(FilterByCollectionOption);
53+
5354
CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken));
5455

5556
using var loggerFactory = Logger.ConfigureLogger(logLevel);

src/Microsoft.OpenApi.Hidi/OpenApiService.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ CancellationToken cancellationToken
102102
stream.Position = 0;
103103
}
104104

105-
document = await ConvertCsdlToOpenApi(stream, settingsFile);
105+
document = await ConvertCsdlToOpenApi(stream, settingsFile, cancellationToken);
106106
stopwatch.Stop();
107107
logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count);
108108
}
@@ -216,6 +216,10 @@ CancellationToken cancellationToken
216216
textWriter.Flush();
217217
}
218218
}
219+
catch(TaskCanceledException)
220+
{
221+
Console.Error.WriteLine("CTRL+C pressed, aborting the operation.");
222+
}
219223
catch (Exception ex)
220224
{
221225
throw new InvalidOperationException($"Could not transform the document, reason: {ex.Message}", ex);
@@ -324,12 +328,12 @@ internal static IConfiguration GetConfiguration(string settingsFile)
324328
/// </summary>
325329
/// <param name="csdl">The CSDL stream.</param>
326330
/// <returns>An OpenAPI document.</returns>
327-
public static async Task<OpenApiDocument> ConvertCsdlToOpenApi(Stream csdl, string settingsFile = null)
331+
public static async Task<OpenApiDocument> ConvertCsdlToOpenApi(Stream csdl, string settingsFile = null, CancellationToken token = default)
328332
{
329333
using var reader = new StreamReader(csdl);
330-
var csdlText = await reader.ReadToEndAsync();
334+
var csdlText = await reader.ReadToEndAsync(token);
331335
var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader());
332-
336+
333337
var config = GetConfiguration(settingsFile);
334338
var settings = new OpenApiConvertSettings()
335339
{
@@ -353,9 +357,8 @@ public static async Task<OpenApiDocument> ConvertCsdlToOpenApi(Stream csdl, stri
353357
EnableTypeDisambiguationForDefaultValueOfOdataTypeProperty = true
354358
};
355359
config.GetSection("OpenApiConvertSettings").Bind(settings);
356-
357-
OpenApiDocument document = edmModel.ConvertToOpenApi(settings);
358360

361+
OpenApiDocument document = edmModel.ConvertToOpenApi(settings);
359362
document = FixReferences(document);
360363

361364
return document;

src/Microsoft.OpenApi.Hidi/Program.cs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System;
45
using System.CommandLine;
5-
using System.CommandLine.Builder;
6-
using System.CommandLine.Hosting;
76
using System.CommandLine.Parsing;
8-
7+
using System.Diagnostics;
98
using System.IO;
9+
using System.Threading;
1010
using System.Threading.Tasks;
11-
using Microsoft.Extensions.Configuration;
12-
using Microsoft.Extensions.Hosting;
1311
using Microsoft.Extensions.Logging;
1412
using Microsoft.OpenApi.Hidi.Handlers;
1513

@@ -18,9 +16,8 @@ namespace Microsoft.OpenApi.Hidi
1816
static class Program
1917
{
2018
static async Task Main(string[] args)
21-
{
22-
var rootCommand = new RootCommand() {
23-
};
19+
{
20+
var rootCommand = new RootCommand() {};
2421

2522
// command option parameters and aliases
2623
var descriptionOption = new Option<string>("--openapi", "Input OpenAPI description file path or URL");
@@ -120,12 +117,12 @@ static async Task Main(string[] args)
120117

121118
rootCommand.Add(transformCommand);
122119
rootCommand.Add(validateCommand);
123-
120+
124121
// Parse the incoming args and invoke the handler
125122
await rootCommand.InvokeAsync(args);
126123

127124
//// Wait for logger to write messages to the console before exiting
128125
await Task.Delay(10);
129-
}
126+
}
130127
}
131128
}

test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen
3939
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\Todo.xml");
4040
var fileInput = new FileInfo(filePath);
4141
var csdlStream = fileInput.OpenRead();
42-
42+
4343
// Act
4444
var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream);
4545
var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags);

0 commit comments

Comments
 (0)