static async Task Inner(string targetDirectory, ConfigInput configInput) { var(fileConfig, configFilePath) = ConfigReader.Read(targetDirectory); var configResult = ConfigDefaults.Convert(fileConfig, configInput); var message = LogBuilder.BuildConfigLogMessage(targetDirectory, configResult, configFilePath); Console.WriteLine(message); var processor = new DirectoryMarkdownProcessor( targetDirectory, log: Console.WriteLine, directoryFilter: ExcludeToFilterBuilder.ExcludesToFilter(configResult.Exclude), readOnly: configResult.ReadOnly, writeHeader: configResult.WriteHeader, header: configResult.Header, urlPrefix: configResult.UrlPrefix, linkFormat: configResult.LinkFormat, convention: configResult.Convention, tocExcludes: configResult.TocExcludes, documentExtensions: configResult.DocumentExtensions, tocLevel: configResult.TocLevel, treatMissingAsWarning: configResult.TreatMissingAsWarning, maxWidth: configResult.MaxWidth, validateContent: configResult.ValidateContent, hashSnippetAnchors: configResult.HashSnippetAnchors); var snippets = new List <Snippet>(); await snippets.AppendUrlsAsSnippets(configResult.UrlsAsSnippets); processor.AddSnippets(snippets); try { processor.Run(); } catch (SnippetException exception) { Console.WriteLine($"Failed: {exception.Message}"); Environment.Exit(1); } }
public override bool Execute() { var stopwatch = Stopwatch.StartNew(); var root = GitRepoDirectoryFinder.FindForDirectory(ProjectDirectory); var(fileConfig, configFilePath) = ConfigReader.Read(root); var configResult = ConfigDefaults.Convert( fileConfig, new ConfigInput { ReadOnly = ReadOnly, ValidateContent = ValidateContent, WriteHeader = WriteHeader, Header = Header, UrlPrefix = UrlPrefix, LinkFormat = LinkFormat, Convention = Convention, Exclude = Exclude, TocExcludes = TocExcludes, TocLevel = TocLevel, MaxWidth = MaxWidth, UrlsAsSnippets = UrlsAsSnippets, DocumentExtensions = DocumentExtensions, TreatMissingAsWarning = TreatMissingAsWarning, HashSnippetAnchors = HashSnippetAnchors, }); var message = LogBuilder.BuildConfigLogMessage(root, configResult, configFilePath); Log.LogMessage(message); var processor = new DirectoryMarkdownProcessor( root, log: s => Log.LogMessage(s), readOnly: configResult.ReadOnly, directoryFilter: ExcludeToFilterBuilder.ExcludesToFilter(configResult.Exclude), writeHeader: configResult.WriteHeader, header: configResult.Header, urlPrefix: configResult.UrlPrefix, linkFormat: configResult.LinkFormat, convention: configResult.Convention, tocLevel: configResult.TocLevel, tocExcludes: configResult.TocExcludes, documentExtensions: configResult.DocumentExtensions, treatMissingAsWarning: configResult.TreatMissingAsWarning, maxWidth: configResult.MaxWidth, validateContent: configResult.ValidateContent, hashSnippetAnchors: configResult.HashSnippetAnchors); var snippets = new List <Snippet>(); try { snippets.AppendUrlsAsSnippets(configResult.UrlsAsSnippets).GetAwaiter().GetResult(); processor.AddSnippets(snippets); var snippetsInError = processor.Snippets.Where(x => x.IsInError).ToList(); if (snippetsInError.Any()) { foreach (var snippet in snippetsInError) { Log.LogFileError($"Snippet error: {snippet.Error}. Key: {snippet.Key}", snippet.Path, snippet.StartLine, 0); } return(false); } processor.Run(); return(true); } catch (MissingSnippetsException exception) { foreach (var missing in exception.Missing) { if (configResult.TreatMissingAsWarning) { Log.LogWarning($"MarkdownSnippets: Missing snippet: {missing.Key}", missing.File, missing.LineNumber, 0); } else { Log.LogFileError($"MarkdownSnippets: Missing snippet: {missing.Key}", missing.File, missing.LineNumber, 0); } } return(configResult.TreatMissingAsWarning); } catch (MissingIncludesException exception) { foreach (var missing in exception.Missing) { if (configResult.TreatMissingAsWarning) { Log.LogWarning($"MarkdownSnippets: Missing include: {missing.Key}", missing.File, missing.LineNumber); } else { Log.LogFileError($"MarkdownSnippets: Missing include: {missing.Key}", missing.File, missing.LineNumber, 0); } } return(configResult.TreatMissingAsWarning); } catch (ContentValidationException exception) { foreach (var error in exception.Errors) { //TODO: add column Log.LogFileError($"MarkdownSnippets: Content validation: {error.Error}", error.File, error.Line, error.Column); } return(configResult.TreatMissingAsWarning); } catch (MarkdownProcessingException exception) { Log.LogFileError($"MarkdownSnippets: {exception.Message}", exception.File, exception.LineNumber, 0); return(false); } catch (SnippetException exception) { Log.LogError($"MarkdownSnippets: {exception}"); return(false); } finally { Log.LogMessageFromText($"Finished MarkdownSnippets {stopwatch.ElapsedMilliseconds}ms", MessageImportance.Normal); } }