Skip to content

Commit b04f097

Browse files
authored
Incremental compile picks up files with errors/warnings (#72)
1 parent 0544dab commit b04f097

File tree

3 files changed

+27
-7
lines changed

3 files changed

+27
-7
lines changed

src/Elastic.Markdown/Diagnostics/DiagnosticsChannel.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ public class DiagnosticsCollector(ILoggerFactory loggerFactory, IReadOnlyCollect
8484
public long Warnings => _warnings;
8585
public long Errors => _errors;
8686

87+
public HashSet<string> OffendingFiles { get; } = new();
88+
8789
public async Task StartAsync(Cancel ctx)
8890
{
8991
await Channel.WaitToWrite();
@@ -107,6 +109,7 @@ void Drain()
107109
{
108110
IncrementSeverityCount(item);
109111
HandleItem(item);
112+
OffendingFiles.Add(item.File);
110113
foreach (var output in _outputs)
111114
output.Write(item);
112115
}

src/Elastic.Markdown/DocumentationGenerator.cs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ namespace Elastic.Markdown;
1313

1414
[JsonSourceGenerationOptions(WriteIndented = true)]
1515
[JsonSerializable(typeof(OutputState))]
16-
internal partial class SourceGenerationContext : JsonSerializerContext
17-
{
18-
}
16+
internal partial class SourceGenerationContext : JsonSerializerContext;
17+
1918
public class OutputState
2019
{
2120
public DateTimeOffset LastSeenChanges { get; set; }
21+
public string[] Conflict { get; set; } = [];
2222
}
2323

2424
public class DocumentationGenerator
@@ -87,8 +87,15 @@ public async Task GenerateAll(Cancel ctx)
8787
DocumentationSet.ClearOutputDirectory();
8888

8989
_logger.LogInformation($"Last write source: {DocumentationSet.LastWrite}, output observed: {OutputState?.LastSeenChanges}");
90+
91+
var offendingFiles = new HashSet<string>(OutputState?.Conflict ?? []);
9092
var outputSeenChanges = OutputState?.LastSeenChanges ?? DateTimeOffset.MinValue;
91-
if (DocumentationSet.LastWrite > outputSeenChanges && OutputState != null)
93+
if (offendingFiles.Count > 0)
94+
{
95+
_logger.LogInformation($"Reapplying changes since {DocumentationSet.LastWrite}");
96+
_logger.LogInformation($"Reapplying for {offendingFiles.Count} files with errors/warnings");
97+
}
98+
else if (DocumentationSet.LastWrite > outputSeenChanges && OutputState != null)
9299
_logger.LogInformation($"Using incremental build picking up changes since: {OutputState.LastSeenChanges}");
93100
else if (DocumentationSet.LastWrite <= outputSeenChanges && OutputState != null)
94101
{
@@ -108,8 +115,11 @@ public async Task GenerateAll(Cancel ctx)
108115

109116
await Parallel.ForEachAsync(DocumentationSet.Files, ctx, async (file, token) =>
110117
{
111-
if (file.SourceFile.LastWriteTimeUtc <= outputSeenChanges)
118+
if (offendingFiles.Contains(file.SourceFile.FullName))
119+
_logger.LogInformation($"Re-evaluating {file.SourceFile.FullName}");
120+
else if (file.SourceFile.LastWriteTimeUtc <= outputSeenChanges)
112121
return;
122+
113123
var item = Interlocked.Increment(ref handledItems);
114124
var outputFile = OutputFile(file.RelativePath);
115125
if (file is MarkdownFile markdown)
@@ -147,7 +157,13 @@ private async Task GenerateDocumentationState(Cancel ctx)
147157
{
148158
var stateFile = DocumentationSet.OutputStateFile;
149159
_logger.LogInformation($"Writing documentation state {DocumentationSet.LastWrite} to {stateFile.FullName}");
150-
var state = new OutputState { LastSeenChanges = DocumentationSet.LastWrite };
160+
var badFiles = Context.Collector.OffendingFiles.ToArray();
161+
var state = new OutputState
162+
{
163+
LastSeenChanges = DocumentationSet.LastWrite,
164+
Conflict = badFiles
165+
166+
};
151167
var bytes = JsonSerializer.SerializeToUtf8Bytes(state, SourceGenerationContext.Default.OutputState);
152168
await DocumentationSet.OutputPath.FileSystem.File.WriteAllBytesAsync(stateFile.FullName, bytes, ctx);
153169
}

src/Elastic.Markdown/IO/DocumentationSet.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ public class DocumentationSet
1414
public string Name { get; }
1515
public IDirectoryInfo SourcePath { get; }
1616
public IDirectoryInfo OutputPath { get; }
17-
public DateTimeOffset LastWrite { get; }
1817
public IFileInfo OutputStateFile { get; }
1918

19+
public DateTimeOffset LastWrite { get; }
20+
2021
public ConfigurationFile Configuration { get; }
2122

2223
private MarkdownParser MarkdownParser { get; }

0 commit comments

Comments
 (0)