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); } } }