@@ -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+
1918public class OutputState
2019{
2120 public DateTimeOffset LastSeenChanges { get ; set ; }
21+ public string [ ] Conflict { get ; set ; } = [ ] ;
2222}
2323
2424public 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 }
0 commit comments