diff --git a/Day/2024-Q2/Helper-2024-06-24.cs b/Day/2024-Q2/Helper-2024-06-24.cs index be07682..61e85e8 100644 --- a/Day/2024-Q2/Helper-2024-06-24.cs +++ b/Day/2024-Q2/Helper-2024-06-24.cs @@ -73,7 +73,7 @@ internal static partial class Helper20240624 } } - internal static void MoveUpOndDirectory(ILogger logger, List args) + internal static void MoveUpOneDirectory(ILogger logger, List args) { string searchPattern = args[2]; string sourceDirectory = Path.GetFullPath(args[0]); diff --git a/Day/2024-Q3/Helper-2024-07-11.cs b/Day/2024-Q3/Helper-2024-07-11.cs new file mode 100644 index 0000000..24c6971 --- /dev/null +++ b/Day/2024-Q3/Helper-2024-07-11.cs @@ -0,0 +1,71 @@ +using Microsoft.Extensions.Logging; +using System.Collections.ObjectModel; + +namespace File_Folder_Helper.Day; + +internal static partial class Helper20240711 +{ + + internal static void GitRemoteRemove(ILogger logger, List args) + { + string[] lines; + bool branchCheck; + bool remoteCheck; + string? directory; + string parentDirectoryName; + string? parentDirectory; + string branchName = args[6]; + string searchPattern = args[2]; + string remoteToAddUrl = args[5]; + string remoteToRemove = args[3]; + string remoteToAddName = args[4]; + ReadOnlyCollection messages; + string sourceDirectory = Path.GetFullPath(args[0]); + string lastRemoteSegment = remoteToRemove.Split('/')[^1]; + string[] files = Directory.EnumerateFiles(sourceDirectory, searchPattern, new EnumerationOptions() { IgnoreInaccessible = true, RecurseSubdirectories = true, AttributesToSkip = FileAttributes.None }).ToArray(); + logger.LogInformation("Found {files} file(s)", files.Length); + foreach (string file in files) + { + branchCheck = false; + remoteCheck = false; + lines = File.ReadAllLines(file); + foreach (string line in lines) + { + if (!line.Contains(remoteToRemove)) + continue; + remoteCheck = true; + break; + } + foreach (string line in lines) + { + if (!line.Contains(branchName)) + continue; + branchCheck = true; + break; + } + if (!remoteCheck) + continue; + directory = Path.GetDirectoryName(file); + if (directory is null) + continue; + parentDirectory = Path.GetDirectoryName(directory); + if (parentDirectory is null) + continue; + parentDirectoryName = Path.GetFileName(parentDirectory).ToLower(); + messages = Helpers.HelperGit.RemoteRemove(directory, lastRemoteSegment, CancellationToken.None); + foreach (string message in messages) + logger.LogInformation("{function} => {parentDirectoryName}: [{message}]", nameof(Helpers.HelperGit.RemoteRemove), parentDirectoryName, message); + messages = Helpers.HelperGit.RemoteAdd(directory, remoteToAddName, $"{remoteToAddUrl}{parentDirectoryName}.git", CancellationToken.None); + foreach (string message in messages) + logger.LogInformation("{function} => {parentDirectoryName}: [{message}]", nameof(Helpers.HelperGit.RemoteAdd), parentDirectoryName, message); + if (!branchCheck) + continue; + try + { messages = Helpers.HelperGit.PushBranch(directory, remoteToAddName, branchName, CancellationToken.None); } + catch (Exception) { } + foreach (string message in messages) + logger.LogInformation("{function} => {parentDirectoryName}: [{message}]", nameof(Helpers.HelperGit.PushBranch), parentDirectoryName, message); + } + } + +} \ No newline at end of file diff --git a/Day/HelperDay.cs b/Day/HelperDay.cs index e31269d..21ce8f9 100644 --- a/Day/HelperDay.cs +++ b/Day/HelperDay.cs @@ -76,7 +76,9 @@ internal static class HelperDay else if (args[1] == "Day-Helper-2024-06-23") Day.Helper20240623.UpdateSubTasksInMarkdownFiles(logger, args); else if (args[1] == "Day-Helper-2024-06-24") - Day.Helper20240624.MoveUpOndDirectory(logger, args); + Day.Helper20240624.MoveUpOneDirectory(logger, args); + else if (args[1] == "Day-Helper-2024-07-11") + Day.Helper20240711.GitRemoteRemove(logger, args); else throw new Exception(appSettings.Company); } diff --git a/Helpers/HelperGit.cs b/Helpers/HelperGit.cs index 09eec1e..4f3b92b 100644 --- a/Helpers/HelperGit.cs +++ b/Helpers/HelperGit.cs @@ -46,7 +46,7 @@ internal static class HelperGit private static List GetOthersModifiedAndDeletedExcludingStandardFilesAsList(string repositoryDirectory, bool usePathCombine, CancellationToken cancellationToken) { List results = []; - Task task = RunAsync($"ls-files --others --modified --deleted --exclude-standard", repositoryDirectory, cancellationToken); + Task task = RunAsync("ls-files --others --modified --deleted --exclude-standard", repositoryDirectory, cancellationToken); task.Wait(cancellationToken); string[] files = task.Result.Split("\r\n"); foreach (string file in files) @@ -62,7 +62,9 @@ internal static class HelperGit internal static ReadOnlyCollection GetOthersModifiedAndDeletedExcludingStandardFiles(string repositoryDirectory, bool usePathCombine, CancellationToken cancellationToken) { List results = []; + List relativePathFiles; DirectoryInfo directoryInfo; + bool usePathCombineInner = false; string checkDirectory = Path.Combine(repositoryDirectory, ".git"); if (Directory.Exists(checkDirectory)) results.AddRange(GetOthersModifiedAndDeletedExcludingStandardFilesAsList(repositoryDirectory, usePathCombine, cancellationToken)); @@ -75,9 +77,44 @@ internal static class HelperGit checkDirectory = Path.Combine(directoryInfo.LinkTarget, ".git"); if (!Directory.Exists(checkDirectory)) continue; - results.AddRange(GetOthersModifiedAndDeletedExcludingStandardFilesAsList(directoryInfo.LinkTarget, usePathCombine, cancellationToken)); + relativePathFiles = GetOthersModifiedAndDeletedExcludingStandardFilesAsList(directoryInfo.LinkTarget, usePathCombineInner, cancellationToken); + foreach (string relativePathFile in relativePathFiles) + results.Add(Path.GetFullPath(Path.Combine(subdirectory, relativePathFile))); } return new(results); } + internal static ReadOnlyCollection RemoteRemove(string repositoryDirectory, string name, CancellationToken cancellationToken) + { + List results = []; + Task task = RunAsync($"remote rm {name}", repositoryDirectory, cancellationToken); + task.Wait(cancellationToken); + string[] lines = task.Result.Split("\r\n"); + foreach (string line in lines) + results.Add(line); + return new(results); + } + + internal static ReadOnlyCollection RemoteAdd(string repositoryDirectory, string name, string url, CancellationToken cancellationToken) + { + List results = []; + Task task = RunAsync($"remote add {name} {url}", repositoryDirectory, cancellationToken); + task.Wait(cancellationToken); + string[] lines = task.Result.Split("\r\n"); + foreach (string line in lines) + results.Add(line); + return new(results); + } + + internal static ReadOnlyCollection PushBranch(string repositoryDirectory, string remote, string name, CancellationToken cancellationToken) + { + List results = []; + Task task = RunAsync($"push {remote} {name}", repositoryDirectory, cancellationToken); + task.Wait(cancellationToken); + string[] lines = task.Result.Split("\r\n"); + foreach (string line in lines) + results.Add(line); + return new(results); + } + } \ No newline at end of file diff --git a/Helpers/HelperMarkdown.cs b/Helpers/HelperMarkdown.cs index 59072fc..229e285 100644 --- a/Helpers/HelperMarkdown.cs +++ b/Helpers/HelperMarkdown.cs @@ -1,6 +1,7 @@ using File_Folder_Helper.Models; using Microsoft.Extensions.Logging; using System.Collections.ObjectModel; +using System.Diagnostics; using System.Globalization; using System.Text; using System.Text.Json; @@ -14,7 +15,8 @@ internal static partial class HelperMarkdown { private record Input(string? Destination, - string Source); + string Source, + bool UseProcessStart); private record Record(string Directory, string File, @@ -28,6 +30,7 @@ internal static partial class HelperMarkdown string FileNameWithoutExtension, ReadOnlyDictionary FrontMatterYaml, string H1, + bool IsGitOthersModifiedAndDeletedExcludingStandard, bool IsKanbanIndex, bool IsKanbanMarkdown, DateTime LastWriteDateTime, @@ -52,7 +55,7 @@ internal static partial class HelperMarkdown { } - private static void SetRecursiveLines(AppSettings appSettings, ILogger logger, ReadOnlyDictionary> keyValuePairs, string linkTitle, MarkdownFile markdownFile, string[] lines, List indentations, List recursiveLines) + private static void SetRecursiveLines(AppSettings appSettings, ILogger logger, Input input, ReadOnlyDictionary> keyValuePairs, string linkTitle, MarkdownFile markdownFile, string[] lines, List indentations, List recursiveLines) { if (recursiveLines is null) throw new Exception(); @@ -97,14 +100,16 @@ internal static partial class HelperMarkdown if (markdownFileH1AndRelativePath.MarkdownFile is null || markdownFileH1AndRelativePath.H1 is null || markdownFileH1AndRelativePath.RelativePath is null) { recursiveLines.Add($"???{indentation}{lines[i]}"); - logger.LogInformation("Didn't find '{line}' in <{file}>", lines[i], markdownFile.FileName); + logger.LogInformation("`{line}' in <{file}>", lines[i], markdownFile.FileName); + if (input.UseProcessStart && File.Exists(markdownFile.File)) + _ = Process.Start(new ProcessStartInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Programs", "VSCodium", "VSCodium.exe"), markdownFile.File) { WorkingDirectory = input.Source }); continue; } if (markdownFileH1AndRelativePath.Lines is null) continue; indentations.Add('\t'); recursiveLines.Add($"{indentation}{lines[i]}"); - SetRecursiveLines(appSettings, logger, keyValuePairs, segmentsA[0].Split('[')[^1], markdownFileH1AndRelativePath.MarkdownFile, markdownFileH1AndRelativePath.Lines, indentations, recursiveLines); + SetRecursiveLines(appSettings, logger, input, keyValuePairs, segmentsA[0].Split('[')[^1], markdownFileH1AndRelativePath.MarkdownFile, markdownFileH1AndRelativePath.Lines, indentations, recursiveLines); } if (indentations.Count > 0) indentations.RemoveAt(0); @@ -466,11 +471,10 @@ internal static partial class HelperMarkdown return new(results); } - private static int ConvertFileToSlugName(ReadOnlyDictionary relativeToCollection, ReadOnlyCollection gitOthersModifiedAndDeletedExcludingStandardFiles) + private static int ConvertFileToSlugName(ReadOnlyDictionary relativeToCollection) { int result = 0; string h1; - bool gitCheck; string h1Check; string[] lines; string checkName; @@ -482,7 +486,6 @@ internal static partial class HelperMarkdown continue; lines = relativeTo.Value.Lines; markdownFile = relativeTo.Value.MarkdownFile; - gitCheck = gitOthersModifiedAndDeletedExcludingStandardFiles.Contains(markdownFile.File); if (markdownFile.LineNumber.H1 is not null) { h1 = lines[markdownFile.LineNumber.H1.Value]; @@ -491,7 +494,7 @@ internal static partial class HelperMarkdown h1Check = $"# {h1[2..]}"; if (h1Check.Length == h1.Length && h1Check != h1) { - if (!gitCheck) + if (!markdownFile.IsGitOthersModifiedAndDeletedExcludingStandard) continue; lines[markdownFile.LineNumber.H1.Value] = h1Check; File.WriteAllLines(markdownFile.File, lines); @@ -507,7 +510,7 @@ internal static partial class HelperMarkdown checkName = Path.Combine(markdownFile.Directory, checkFileName); if (checkName == markdownFile.File) continue; - if (!gitCheck) + if (!markdownFile.IsGitOthersModifiedAndDeletedExcludingStandard) continue; File.Move(markdownFile.File, checkName); result += 1; @@ -525,24 +528,14 @@ internal static partial class HelperMarkdown private static ReadOnlyCollection GetFiles(AppSettings appSettings, Input input) { List results = []; - FileInfo fileInfo; List files = []; - DirectoryInfo directoryInfo; string[] directories = Directory.GetDirectories(input.Source, "*", SearchOption.AllDirectories); foreach (string directory in directories) { files.Clear(); - directoryInfo = new(directory); files.AddRange(GetFiles(appSettings, directory, SearchOption.TopDirectoryOnly)); - if (directoryInfo.LinkTarget is not null) - files.AddRange(GetFiles(appSettings, directoryInfo.LinkTarget, SearchOption.AllDirectories)); foreach (string file in files) - { results.Add(file); - fileInfo = new(file); - if (fileInfo.LinkTarget is not null) - results.Add(fileInfo.LinkTarget); - } } return new(results); } @@ -738,12 +731,15 @@ internal static partial class HelperMarkdown { Input result; string? destination = null; + bool useProcessStart = false; string source = Path.GetFullPath(args[0]); for (int i = 1; i < args.Count; i++) { if (args[i].Length == 2 && i + 1 < args.Count) { - if (args[i][1] == 'd') + if (args[i][1] == 'u') + useProcessStart = args[i + 1] == "true"; + else if (args[i][1] == 'd') destination = Path.GetFullPath(args[i + 1]); i++; } @@ -756,16 +752,15 @@ internal static partial class HelperMarkdown if (!Directory.Exists(destination)) _ = Directory.CreateDirectory(destination); } - result = new(destination, source); + result = new(destination, source, useProcessStart); return result; } - private static int CircularReference(ILogger logger, ReadOnlyDictionary relativeToCollection, ReadOnlyCollection gitOthersModifiedAndDeletedExcludingStandardFiles) + private static int CircularReference(ILogger logger, ReadOnlyDictionary relativeToCollection) { int result = 0; string line; string check; - bool gitCheck; string[] lines; bool circularReference; MarkdownFile markdownFile; @@ -776,6 +771,8 @@ internal static partial class HelperMarkdown circularReference = false; lines = relativeTo.Value.Lines; markdownFile = relativeTo.Value.MarkdownFile; + if (!markdownFile.IsGitOthersModifiedAndDeletedExcludingStandard) + continue; for (int i = 0; i < lines.Length; i++) { check = $"[[{markdownFile.FileNameWithoutExtension}]]"; @@ -815,22 +812,18 @@ internal static partial class HelperMarkdown } if (!circularReference) continue; - gitCheck = gitOthersModifiedAndDeletedExcludingStandardFiles.Contains(markdownFile.File); - if (!gitCheck) - continue; File.WriteAllLines(markdownFile.File, lines); result += 1; } return result; } - private static int FindReplace(ReadOnlyDictionary relativeToCollection, ReadOnlyCollection gitOthersModifiedAndDeletedExcludingStandardFiles) + private static int FindReplace(ReadOnlyDictionary relativeToCollection) { int result = 0; bool found; string line; string check; - bool gitCheck; string[] lines; MarkdownFile markdownFile; foreach (KeyValuePair relativeTo in relativeToCollection) @@ -840,6 +833,8 @@ internal static partial class HelperMarkdown found = false; lines = relativeTo.Value.Lines; markdownFile = relativeTo.Value.MarkdownFile; + if (!markdownFile.IsGitOthersModifiedAndDeletedExcludingStandard) + continue; for (int i = 0; i < lines.Length; i++) { check = $"[[K-A/"; @@ -866,21 +861,17 @@ internal static partial class HelperMarkdown } if (!found) continue; - gitCheck = gitOthersModifiedAndDeletedExcludingStandardFiles.Contains(markdownFile.File); - if (!gitCheck) - continue; File.WriteAllLines(markdownFile.File, lines); result += 1; } return result; } - private static int ConvertToRelativePath(ILogger logger, ReadOnlyDictionary relativeToCollection, ReadOnlyCollection gitOthersModifiedAndDeletedExcludingStandardFiles) + private static int ConvertToRelativePath(ILogger logger, Input input, ReadOnlyDictionary relativeToCollection) { int result = 0; bool write; string line; - bool gitCheck; string[] lines; string[] segmentsA; string[] segmentsB; @@ -895,6 +886,8 @@ internal static partial class HelperMarkdown write = false; lines = relativeTo.Value.Lines; markdownFile = relativeTo.Value.MarkdownFile; + if (!markdownFile.IsGitOthersModifiedAndDeletedExcludingStandard) + continue; for (int i = 0; i < lines.Length; i++) { segmentsA = lines[i].Split("]]"); @@ -908,6 +901,8 @@ internal static partial class HelperMarkdown if (markdownFileH1AndRelativePath.MarkdownFile is null || markdownFileH1AndRelativePath.H1 is null || markdownFileH1AndRelativePath.RelativePath is null) { logger.LogInformation("Didn't find '{line}' in <{file}>", lines[i], markdownFile.FileName); + if (input.UseProcessStart && File.Exists(markdownFile.File)) + _ = Process.Start(new ProcessStartInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Programs", "VSCodium", "VSCodium.exe"), markdownFile.File) { WorkingDirectory = input.Source }); continue; } line = $"{segmentsB[0]}[{markdownFileH1AndRelativePath.H1}]({markdownFileH1AndRelativePath.RelativePath.Replace('\\', '/')}){segmentsA[^1]}"; @@ -919,22 +914,18 @@ internal static partial class HelperMarkdown } if (!write) continue; - gitCheck = gitOthersModifiedAndDeletedExcludingStandardFiles.Contains(markdownFile.File); - if (!gitCheck) - continue; File.WriteAllLines(markdownFile.File, lines); result += 1; } return result; } - private static int ConvertFileToSlugName(AppSettings appSettings, ILogger logger, ReadOnlyDictionary relativeToCollection, ReadOnlyCollection gitOthersModifiedAndDeletedExcludingStandardFiles) + private static int ConvertFileToSlugName(AppSettings appSettings, ILogger logger, Input input, ReadOnlyDictionary relativeToCollection) { int result = 0; bool write; string file; string line; - bool gitCheck; string[] lines; string fileName; string checkName; @@ -956,6 +947,8 @@ internal static partial class HelperMarkdown markdownFile = relativeTo.Value.MarkdownFile; if (markdownFile.IsKanbanIndex) continue; + if (!markdownFile.IsGitOthersModifiedAndDeletedExcludingStandard) + continue; if (!File.Exists(markdownFile.File)) continue; write = false; @@ -983,6 +976,8 @@ internal static partial class HelperMarkdown if (markdownFileH1AndRelativePath.MarkdownFile is null || markdownFileH1AndRelativePath.H1 is null || markdownFileH1AndRelativePath.RelativePath is null) { logger.LogInformation("Didn't find '{line}' in <{file}>", lines[i], markdownFile.FileName); + if (input.UseProcessStart && File.Exists(markdownFile.File)) + _ = Process.Start(new ProcessStartInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Programs", "VSCodium", "VSCodium.exe"), markdownFile.File) { WorkingDirectory = input.Source }); continue; } line = $"{string.Join('[', segmentsC, 0, segmentsC.Length - 1)}[{markdownFileH1AndRelativePath.H1}]({markdownFileH1AndRelativePath.RelativePath.Replace('\\', '/')}){segmentsB[^1]}"; @@ -1017,14 +1012,11 @@ internal static partial class HelperMarkdown } if (!write) continue; - gitCheck = gitOthersModifiedAndDeletedExcludingStandardFiles.Contains(markdownFile.File); - if (!gitCheck) - continue; File.WriteAllLines(markdownFile.File, lines); result += 1; } if (result == 0) - result = ConvertFileToSlugName(relativeToCollection, gitOthersModifiedAndDeletedExcludingStandardFiles); + result = ConvertFileToSlugName(relativeToCollection); return result; } @@ -1034,22 +1026,27 @@ internal static partial class HelperMarkdown string h1; string key; string type; - bool gitCheck; FileInfo fileInfo; bool isKanbanIndex; List lines; + bool isWithinSource; bool isKanbanMarkdown; LineNumber lineNumber; MarkdownFile markdownFile; string fileNameWithoutExtension; ReadOnlyDictionary frontMatterYaml; + bool isGitOthersModifiedAndDeletedExcludingStandard; ReadOnlyCollection files = GetFiles(appSettings, input); foreach (string file in files) { // cSpell:disable fileInfo = new(file); if (fileInfo.DirectoryName is null) continue; - key = !file.Contains(input.Source) ? file : Path.GetRelativePath(input.Source, file); + key = Path.GetRelativePath(input.Source, file); + isWithinSource = file.Contains(input.Source); + isGitOthersModifiedAndDeletedExcludingStandard = gitOthersModifiedAndDeletedExcludingStandardFiles.Contains(file); + if (!isWithinSource && results.ContainsKey(key)) + continue; (lines, lineNumber) = GetStatusAndFrontMatterYamlEndLineNumbers(fileInfo); fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileInfo.FullName); h1 = fileNameWithoutExtension.ToLower().Replace("%20", "-").Replace(' ', '-'); @@ -1058,8 +1055,7 @@ internal static partial class HelperMarkdown (type, h1) = GetTypeAndH1(appSettings, h1, lines, lineNumber); else { - gitCheck = gitOthersModifiedAndDeletedExcludingStandardFiles.Contains(file); - if (!gitCheck) + if (!isGitOthersModifiedAndDeletedExcludingStandard) continue; type = appSettings.DefaultNoteType; File.WriteAllLines(file, ["---", $"type: {type}\"", "---", string.Empty, $"# {h1}"]); @@ -1075,6 +1071,7 @@ internal static partial class HelperMarkdown fileNameWithoutExtension, frontMatterYaml, h1, + isGitOthersModifiedAndDeletedExcludingStandard, isKanbanIndex, isKanbanMarkdown, fileInfo.LastWriteTime, @@ -1085,28 +1082,6 @@ internal static partial class HelperMarkdown return new(results); } - private static List GetRecursiveLines(AppSettings appSettings, Input input, ILogger logger, ReadOnlyDictionary relativeToCollection) - { - List results = []; - string[] lines; - List indentations; - MarkdownFile markdownFile; - List recursiveLines; - ReadOnlyDictionary> keyValuePairs = GetKeyValuePairs(relativeToCollection); - foreach (KeyValuePair relativeTo in relativeToCollection) - { - if (relativeTo.Value.Lines.Length == 0) - continue; - indentations = []; - recursiveLines = []; - lines = relativeTo.Value.Lines; - markdownFile = relativeTo.Value.MarkdownFile; - SetRecursiveLines(appSettings, logger, keyValuePairs, markdownFile.FileNameWithoutExtension, markdownFile, lines, indentations, recursiveLines); - results.Add(new(relativeTo.Value.MarkdownFile, recursiveLines.ToArray())); - } - return results; - } - private static void SaveColumnToCards(Input input, ReadOnlyDictionary relativeToCollection) { if (string.IsNullOrEmpty(input.Destination)) @@ -1136,11 +1111,10 @@ internal static partial class HelperMarkdown return (type, h1FromFile); } - private static int SetFrontMatterAndH1(AppSettings appSettings, ILogger logger, Input input, ReadOnlyDictionary relativeToCollection, ReadOnlyCollection gitOthersModifiedAndDeletedExcludingStandardFiles) + private static int SetFrontMatterAndH1(AppSettings appSettings, ILogger logger, Input input, ReadOnlyCollection gitOthersModifiedAndDeletedExcludingStandardFiles, ReadOnlyDictionary relativeToCollection) { int result = 0; List results = []; - bool gitCheck; string h1Line; string[] lines; string typeLine; @@ -1165,7 +1139,6 @@ internal static partial class HelperMarkdown typeLine = $"type: {appSettings.DefaultNoteType}"; h1Line = $"# {markdownFile.FileNameWithoutExtension}"; creationDateTime = markdownFile.CreationDateTime > markdownFile.LastWriteDateTime ? markdownFile.LastWriteDateTime : markdownFile.CreationDateTime; - gitCheck = gitOthersModifiedAndDeletedExcludingStandardFiles.Contains(markdownFile.File); createdLine = $"created: {creationDateTime.ToUniversalTime():yyyy-MM-ddTHH:mm:ss.fffZ}"; updatedLine = $"updated: {markdownFile.LastWriteDateTime.ToUniversalTime():yyyy-MM-ddTHH:mm:ss.fffZ}"; if (markdownFile.IsKanbanIndex) @@ -1181,7 +1154,7 @@ internal static partial class HelperMarkdown results.Insert(0, string.Empty); } results.Insert(0, "---"); - if (gitCheck) + if (markdownFile.IsGitOthersModifiedAndDeletedExcludingStandard) { results.Insert(0, updatedLine); results.Insert(0, createdLine); @@ -1199,7 +1172,7 @@ internal static partial class HelperMarkdown } if (markdownFile.LineNumber.Type is null) results.Insert(markdownFile.LineNumber.FrontMatterYamlEnd.Value, typeLine); - if (gitCheck) + if (markdownFile.IsGitOthersModifiedAndDeletedExcludingStandard) { if (markdownFile.LineNumber.Updated is null) results.Insert(markdownFile.LineNumber.FrontMatterYamlEnd.Value, updatedLine); @@ -1235,7 +1208,7 @@ internal static partial class HelperMarkdown } if (results.Count == lines.Length && string.Join('\r', lines) == string.Join('\r', results)) continue; - if (!gitCheck) + if (!markdownFile.IsGitOthersModifiedAndDeletedExcludingStandard) continue; File.WriteAllLines(markdownFile.File, results); File.SetLastWriteTime(markdownFile.File, markdownFile.LastWriteDateTime); @@ -1250,11 +1223,10 @@ internal static partial class HelperMarkdown return new(result?.MarkdownFile, result?.Lines, result?.MarkdownFile.H1, result is null ? null : Path.GetRelativePath(markdownFile.Directory, Path.GetFullPath(result.MarkdownFile.File))); } - private static int SortFrontMatter(AppSettings appSettings, ILogger logger, Input input, ReadOnlyDictionary relativeToCollection, ReadOnlyCollection gitOthersModifiedAndDeletedExcludingStandardFiles) + private static int SortFrontMatter(AppSettings appSettings, ILogger logger, Input input, ReadOnlyDictionary relativeToCollection) { int result = 0; List results = []; - bool gitCheck; string[] lines; string frontMatterYaml; MarkdownFile markdownFile; @@ -1269,8 +1241,7 @@ internal static partial class HelperMarkdown markdownFile = relativeTo.Value.MarkdownFile; if (markdownFile.IsKanbanMarkdown) continue; - gitCheck = gitOthersModifiedAndDeletedExcludingStandardFiles.Contains(markdownFile.File); - if (!gitCheck) + if (!markdownFile.IsGitOthersModifiedAndDeletedExcludingStandard) continue; if (markdownFile.LineNumber.FrontMatterYamlEnd is null) continue; @@ -1296,37 +1267,37 @@ internal static partial class HelperMarkdown Input input = GetInput(args); ReadOnlyCollection gitOthersModifiedAndDeletedExcludingStandardFiles = HelperGit.GetOthersModifiedAndDeletedExcludingStandardFiles(input.Source, usePathCombine, cancellationToken); ReadOnlyDictionary relativeToCollection = GetRelativeToCollection(appSettings, input, gitOthersModifiedAndDeletedExcludingStandardFiles); - updated = SetFrontMatterAndH1(appSettings, logger, input, relativeToCollection, gitOthersModifiedAndDeletedExcludingStandardFiles); + updated = SetFrontMatterAndH1(appSettings, logger, input, gitOthersModifiedAndDeletedExcludingStandardFiles, relativeToCollection); if (updated != 0) { relativeToCollection = GetRelativeToCollection(appSettings, input, gitOthersModifiedAndDeletedExcludingStandardFiles); logger.LogInformation("{updated} Markdown file(s) were updated", updated); } - updated = SortFrontMatter(appSettings, logger, input, relativeToCollection, gitOthersModifiedAndDeletedExcludingStandardFiles); + updated = SortFrontMatter(appSettings, logger, input, relativeToCollection); if (updated != 0) { relativeToCollection = GetRelativeToCollection(appSettings, input, gitOthersModifiedAndDeletedExcludingStandardFiles); logger.LogInformation("{updated} Markdown file(s) were updated", updated); } - updated = CircularReference(logger, relativeToCollection, gitOthersModifiedAndDeletedExcludingStandardFiles); + updated = CircularReference(logger, relativeToCollection); if (updated != 0) { relativeToCollection = GetRelativeToCollection(appSettings, input, gitOthersModifiedAndDeletedExcludingStandardFiles); logger.LogInformation("{updated} Markdown file(s) were updated", updated); } - updated = FindReplace(relativeToCollection, gitOthersModifiedAndDeletedExcludingStandardFiles); + updated = FindReplace(relativeToCollection); if (updated != 0) { relativeToCollection = GetRelativeToCollection(appSettings, input, gitOthersModifiedAndDeletedExcludingStandardFiles); logger.LogInformation("{updated} Markdown file(s) were updated", updated); } - updated = ConvertToRelativePath(logger, relativeToCollection, gitOthersModifiedAndDeletedExcludingStandardFiles); + updated = ConvertToRelativePath(logger, input, relativeToCollection); if (updated != 0) { relativeToCollection = GetRelativeToCollection(appSettings, input, gitOthersModifiedAndDeletedExcludingStandardFiles); logger.LogInformation("{updated} Markdown file(s) were updated", updated); } - updated = ConvertFileToSlugName(appSettings, logger, relativeToCollection, gitOthersModifiedAndDeletedExcludingStandardFiles); + updated = ConvertFileToSlugName(appSettings, logger, input, relativeToCollection); if (updated != 0) { relativeToCollection = GetRelativeToCollection(appSettings, input, gitOthersModifiedAndDeletedExcludingStandardFiles);