private static FileModel Load(
IDocumentProcessor processor,
ImmutableDictionary<string, object> metadata,
FileMetadata fileMetadata,
FileAndType file,
bool canProcessorIncremental,
DocumentBuildContext context)
{
using (new LoggerFileScope(file.File))
{
Logger.LogDiagnostic($"Processor {processor.Name}, File {file.FullPath}: Loading...");
if (canProcessorIncremental)
{
var incrementalContext = context.IncrementalBuildContext;
ChangeKindWithDependency ck;
string fileKey = ((TypeForwardedToRelativePath)file.File).GetPathFromWorkingFolder().ToString();
if (incrementalContext.ChangeDict.TryGetValue(fileKey, out ck))
{
Logger.LogDiagnostic($"Processor {processor.Name}, File {file.FullPath}, ChangeType {ck}.");
if (ck == ChangeKindWithDependency.Deleted)
{
return null;
}
if (ck == ChangeKindWithDependency.None)
{
Logger.LogDiagnostic($"Processor {processor.Name}, File {file.FullPath}: Check incremental...");
if (processor.BuildSteps.Cast<ISupportIncrementalBuildStep>().All(step => step.CanIncrementalBuild(file)))
{
Logger.LogDiagnostic($"Processor {processor.Name}, File {file.FullPath}: Skip build by incremental.");
return null;
}
Logger.LogDiagnostic($"Processor {processor.Name}, File {file.FullPath}: Incremental not available.");
}
}
}
var path = Path.Combine(file.BaseDir, file.File);
metadata = ApplyFileMetadata(path, metadata, fileMetadata);
try
{
return processor.Load(file, metadata);
}
catch (Exception)
{
Logger.LogError($"Unable to load file: {file.File} via processor: {processor.Name}.");
throw;
}
}
}