Fix file lock not getting disposed when postamble throws an exception

pull/1001/head
Tyrrrz 1 year ago
parent a68df7a065
commit bf76f10030

@ -34,13 +34,22 @@ public class ExportWrapperFixture : IDisposable
// Perform export only if it hasn't been done before
if (!File.Exists(filePath))
{
await new ExportChannelsCommand
try
{
Token = Secrets.DiscordToken,
ChannelIds = new[] { channelId },
ExportFormat = format,
OutputPath = filePath
}.ExecuteAsync(new FakeConsole());
await new ExportChannelsCommand
{
Token = Secrets.DiscordToken,
ChannelIds = new[] { channelId },
ExportFormat = format,
OutputPath = filePath
}.ExecuteAsync(new FakeConsole());
}
catch
{
// If the export fails, delete the file to prevent it from being used by tests
File.Delete(filePath);
throw;
}
}
return await File.ReadAllTextAsync(filePath);

@ -23,9 +23,16 @@ internal partial class MessageExporter : IAsyncDisposable
{
if (_writer is not null)
{
await _writer.WritePostambleAsync(cancellationToken);
await _writer.DisposeAsync();
_writer = null;
try
{
await _writer.WritePostambleAsync(cancellationToken);
}
// Writer must be disposed, even if writing postamble fails
finally
{
await _writer.DisposeAsync();
_writer = null;
}
}
}

@ -67,9 +67,7 @@ internal class HtmlMessageWriter : MessageWriter
}
// Use <!--wmm:ignore--> to preserve blocks of code inside the templates
private string Minify(string html) => _minifier
.Minify(html, false)
.MinifiedContent;
private string Minify(string html) => _minifier.Minify(html, false).MinifiedContent;
public override async ValueTask WritePreambleAsync(
CancellationToken cancellationToken = default)

Loading…
Cancel
Save