From 58ceb31c1c807603df7591598a5b3f9da5b2a3a6 Mon Sep 17 00:00:00 2001 From: ProfessionalUwU Date: Tue, 20 Jun 2023 23:07:16 +0200 Subject: [PATCH] Major changes Now saving the ouput of the diff to a file in tmp diff file can be loaded back into pacserver Rewrote how checkIfDatabasesWereModified works Slimmed down Program.cs to only have before and after Add packages and databases into one list for transfer --- src/Pacserver.Tests/TransferFilesTest.cs | 2 +- src/Pacserver/Pacserver.cs | 73 +++++++++++++++--------- src/Pacserver/Program.cs | 53 ++++++----------- 3 files changed, 64 insertions(+), 64 deletions(-) diff --git a/src/Pacserver.Tests/TransferFilesTest.cs b/src/Pacserver.Tests/TransferFilesTest.cs index 4de7999..baee83e 100644 --- a/src/Pacserver.Tests/TransferFilesTest.cs +++ b/src/Pacserver.Tests/TransferFilesTest.cs @@ -10,7 +10,7 @@ public class TranserFilesTest { // Act utils.readPacmanConfig(); - utils.transferPacmanCache(); + utils.transfer(); // Assert //Assert.NotEmpty(Directory.GetFiles("/home/rene/test/")); diff --git a/src/Pacserver/Pacserver.cs b/src/Pacserver/Pacserver.cs index e3a0fac..1df5492 100644 --- a/src/Pacserver/Pacserver.cs +++ b/src/Pacserver/Pacserver.cs @@ -66,7 +66,7 @@ public class PacserverUtils { if (File.Exists(filePath)) { File.Delete(filePath); } - + using (File.Open(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { using (StreamWriter sw = new StreamWriter(filePath)) { foreach (string package in packageNamesAndVersion) { @@ -85,32 +85,52 @@ public class PacserverUtils { } } - public List databases = new List(); - public void checkIfDatabasesWereModified(string mode, string filePath) { - string[] databases = Directory.GetFiles(pacmanDatabaseDirectory + "sync/"); - - foreach (string database in databases) { - switch (mode) { - case "before": - writeDatabaseAccessTimeToFile(filePath, database); - break; - case "after": - writeDatabaseAccessTimeToFile(filePath, database); - break; - default: - throw new ArgumentException("No valid mode was given. Valid modes are before and after"); - } - } - } - - public void writeDatabaseAccessTimeToFile(string filePath, string database) { + public void saveDiffToFile(string filePath) { if (File.Exists(filePath)) { File.Delete(filePath); } using (File.Open(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { using (StreamWriter sw = new StreamWriter(filePath)) { - sw.WriteLine(database + " " + File.GetLastAccessTime(database)); + foreach (string packageOrDatabase in diffOfPackagesOrDatabases) { + sw.WriteLine(packageOrDatabase); + } + } + } + } + + public List readDiffFileToList(string filePath) { + using (File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { + return File.ReadAllLines(filePath).ToList(); + } + } + + public List databases = new List(); + public void checkIfDatabasesWereModified(string mode, string filePath) { + databases = Directory.GetFiles(pacmanDatabaseDirectory + "sync/").ToList(); + + switch (mode) { + case "before": + writeDatabaseAccessTimeToFile(filePath); + break; + case "after": + writeDatabaseAccessTimeToFile(filePath); + break; + default: + throw new ArgumentException("No valid mode was given. Valid modes are before and after"); + } + } + + public void writeDatabaseAccessTimeToFile(string filePath) { + if (File.Exists(filePath)) { + File.Delete(filePath); + } + + using (File.Open(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read)) { + using (StreamWriter sw = new StreamWriter(filePath)) { + foreach (string database in databases) { + sw.WriteLine(database + " " + File.GetLastAccessTime(database)); + } } } } @@ -123,7 +143,12 @@ public class PacserverUtils { } private static List newerPackagesAndDatabases = new List(); - public async void transferPacmanCache() { + public void combinePackagesWithDatabases() { + newerPackagesAndDatabases.AddRange(packageNamesAndVersion); + newerPackagesAndDatabases.AddRange(databasesToTransfer); + } + + public async void transfer() { HttpClient client = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http://192.168.0.69:12000/upload?path=/"); MultipartFormDataContent content = new MultipartFormDataContent(); @@ -135,8 +160,4 @@ public class PacserverUtils { await client.SendAsync(request); } - - public void transferPacmanDatabases() { - - } } \ No newline at end of file diff --git a/src/Pacserver/Program.cs b/src/Pacserver/Program.cs index 6ca619d..815643d 100644 --- a/src/Pacserver/Program.cs +++ b/src/Pacserver/Program.cs @@ -6,60 +6,39 @@ public class Program { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Please specify an option."); Console.ResetColor(); - Console.WriteLine("Possible options are: determinePacmanCacheDirectory, packagesBefore, packagesAfter, diffPackages, databasesBefore, databasesAfter, diffDatabases, filter"); + Console.WriteLine("Possible options are: before, after"); return; } PacserverUtils utils = new PacserverUtils(); + utils.readPacmanConfig(); switch (args[0]) { - case "determinePacmanCacheDirectory": - utils.readPacmanConfig(); - Console.WriteLine(utils.pacmanCacheDirectory); - break; - case "packagesBefore": - utils.readPacmanConfig(); + case "before": utils.getEveryPackageNameAndVersion("before", "/tmp/packages_before.txt"); - break; - case "packagesAfter": - utils.readPacmanConfig(); - utils.getEveryPackageNameAndVersion("after", "/tmp/packages_after.txt"); - break; - case "diffPackages": - utils.diff("/tmp/packages_before.txt", "/tmp/packages_after.txt"); - string packages = string.Join("\n", utils.diffOfPackagesOrDatabases); - Console.WriteLine(packages); - break; - case "databasesBefore": - utils.readPacmanConfig(); utils.checkIfDatabasesWereModified("before", "/tmp/databases_before.txt"); break; - case "databasesAfter": - utils.readPacmanConfig(); + case "after": + utils.getEveryPackageNameAndVersion("after", "/tmp/packages_after.txt"); utils.checkIfDatabasesWereModified("after", "/tmp/databases_after.txt"); - break; - case "diffDatabases": - utils.diff("/tmp/databases_before.txt", "/tmp/databases_after.txt"); - string databases = string.Join("\n", utils.diffOfPackagesOrDatabases); - Console.WriteLine(databases); - break; - case "filter": + + utils.diff("/tmp/packages_before.txt", "/tmp/packages_after.txt"); + utils.saveDiffToFile("/tmp/package_diff.txt"); + utils.diff("/tmp/databases_before.txt", "/tmp/databases_after.txt"); + utils.saveDiffToFile("/tmp/database_diff.txt"); utils.filterDiffOutputForDatabases(); - string filteredDatabases = string.Join("\n", utils.databasesToTransfer); - Console.WriteLine(filteredDatabases); - break; - case "getEveryPackageInCache": - utils.readPacmanConfig(); - utils.getEveryPackageNameAndVersion("before", "/tmp/packages_before.txt"); - string allPackages = string.Join("\n", utils.packageNamesAndVersion); - Console.WriteLine(allPackages); + + utils.packageNamesAndVersion = utils.readDiffFileToList("/tmp/package_diff.txt"); + + utils.combinePackagesWithDatabases(); + utils.transfer(); break; default: Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(args[0] + " is not a recognized option."); Console.ResetColor(); - Console.WriteLine("Possible options are: determinePacmanCacheDirectory, packagesBefore, packagesAfter, diffPackages, databasesBefore, databasesAfter, diffDatabases, filter"); + Console.WriteLine("Possible options are: before, after"); break; } }