public void ReadOnly() { var root = Path.GetFullPath("DirectoryMarkdownProcessor/Readonly"); try { DirectoryMarkdownProcessor processor = new( root, writeHeader : false, readOnly : true, newLine : "\r", directoryIncludes : _ => true, markdownDirectoryIncludes : _ => true, snippetDirectoryIncludes : _ => true); processor.AddSnippets( SnippetBuild("snippet1"), SnippetBuild("snippet2") ); processor.Run(); FileInfo fileInfo = new(Path.Combine(root, "one.md")); Assert.True(fileInfo.IsReadOnly); } finally { foreach (var file in Directory.EnumerateFiles(root)) { FileEx.ClearReadOnly(file); } } }
void ProcessFile(string sourceFile, MarkdownProcessor markdownProcessor) { log($"Processing {sourceFile}"); var target = GetTargetFile(sourceFile, targetDirectory); FileEx.ClearReadOnly(target); var(lines, newLine) = ReadLines(sourceFile); var relativeSource = sourceFile .Substring(targetDirectory.Length) .Replace('\\', '/'); var result = markdownProcessor.Apply(lines, newLine, relativeSource); var missingSnippets = result.MissingSnippets; if (missingSnippets.Any()) { // If the config value is set to treat missing snippets as warnings, then don't throw if (treatMissingSnippetAsWarning) { foreach (var missing in missingSnippets) { log($"WARN: The source file:{missing.File} includes a key {missing.Key}, however the snippet is missing. Make sure that the snippet is defined."); } } else { throw new MissingSnippetsException(missingSnippets); } } var missingIncludes = result.MissingIncludes; if (missingIncludes.Any()) { // If the config value is set to treat missing include as warnings, then don't throw if (treatMissingIncludeAsWarning) { foreach (var missing in missingIncludes) { log($"WARN: The source file:{missing.File} includes a key {missing.Key}, however the include is missing. Make sure that the include is defined."); } } else { throw new MissingIncludesException(missingIncludes); } } WriteLines(target, lines); if (readOnly) { FileEx.MakeReadOnly(target); } }
void ProcessFile(string sourceFile, MarkdownProcessor markdownProcessor) { log($"Processing {sourceFile}"); string targetFile; if (convention == DocumentConvention.SourceTransform) { targetFile = TargetFileForSourceTransform(sourceFile, targetDirectory); } else { targetFile = sourceFile; } var lines = ReadLines(sourceFile); FileEx.ClearReadOnly(targetFile); var relativeSource = sourceFile .Substring(targetDirectory.Length) .Replace('\\', '/'); var result = markdownProcessor.Apply(lines, newLine, relativeSource); var missingSnippets = result.MissingSnippets; if (missingSnippets.Any()) { // If the config value is set to treat missing snippets as warnings, then don't throw if (treatMissingAsWarning) { foreach (var missing in missingSnippets) { log($"WARN: The source file:{missing.File} includes a key {missing.Key}, however the snippet is missing. Make sure that the snippet is defined."); } } else { throw new MissingSnippetsException(missingSnippets); } } var missingIncludes = result.MissingIncludes; if (missingIncludes.Any()) { // If the config value is set to treat missing include as warnings, then don't throw if (treatMissingAsWarning) { foreach (var missing in missingIncludes) { log($"WARN: The source file:{missing.File} includes a key {missing.Key}, however the include is missing. Make sure that the include is defined."); } } else { throw new MissingIncludesException(missingIncludes); } } var errors = result.ValidationErrors; if (errors.Any()) { throw new ContentValidationException(errors); } WriteLines(targetFile, lines); if (readOnly) { FileEx.MakeReadOnly(targetFile); } }