From 20599a03baeb7fda05d94b86aedf2b7fcbe70c8b Mon Sep 17 00:00:00 2001 From: ProfessionalUwU Date: Sat, 3 Jun 2023 12:08:00 +0200 Subject: [PATCH 1/5] Add justfile --- justfile | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 justfile diff --git a/justfile b/justfile new file mode 100644 index 0000000..c373111 --- /dev/null +++ b/justfile @@ -0,0 +1,11 @@ +default: + @just --list + +run: + @dotnet run + +build: + @dotnet build pacserver.csproj + +publish: + @dotnet publish --configuration Release pacserver.csproj From 04048c4cb948d9b06a792937dd98a33a731904d2 Mon Sep 17 00:00:00 2001 From: ProfessionalUwU Date: Sat, 3 Jun 2023 12:11:32 +0200 Subject: [PATCH 2/5] Implement determinePacmanCacheDirectory Used a StreamReader to read pacman.conf and then read one line until a line contains CacheDir Then used a regex to only get the cache directory --- Program.cs | 3 ++- pacserver.cs | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Program.cs b/Program.cs index 2fe89ff..b4a8c8c 100644 --- a/Program.cs +++ b/Program.cs @@ -6,7 +6,8 @@ Console.ResetColor(); } else { switch (args[0]) { - case "": + case "determinePacmanCacheDirectory": + Pacserver.determinePacmanCacheDirectory(); break; default: break; diff --git a/pacserver.cs b/pacserver.cs index da563c9..1dbf462 100644 --- a/pacserver.cs +++ b/pacserver.cs @@ -1,6 +1,23 @@ +using System.Text.RegularExpressions; + public class Pacserver { public static string pacmanCacheDirectory { get; set; } = string.Empty; public static string determinePacmanCacheDirectory() { + // string defaultPacmanCacheDirectory = "/var/cache/pacman/pkg/"; + + Regex regex = new Regex(@"\/(?:[\w.-]+\/)*[\w.-]+(?:\.\w+)*\/?$"); // https://regex101.com/r/GwWeui/2 + string? line; + StreamReader file = new StreamReader(@"/etc/pacman.conf"); + while ((line = file.ReadLine()) is not null) { + if (line.Contains("CacheDir")) { + Match match = regex.Match(line); + if (match.Success) { + pacmanCacheDirectory = match.ToString(); + } + } + } + file.Close(); + return pacmanCacheDirectory; } From 888df20cc992e6fb694e7838b87850ed54daffc2 Mon Sep 17 00:00:00 2001 From: ProfessionalUwU Date: Sat, 3 Jun 2023 14:50:13 +0200 Subject: [PATCH 3/5] Rework commandline arguments && Add Exceptions --- Program.cs | 5 ++++- pacserver.cs | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Program.cs b/Program.cs index b4a8c8c..bb81872 100644 --- a/Program.cs +++ b/Program.cs @@ -7,9 +7,12 @@ } else { switch (args[0]) { case "determinePacmanCacheDirectory": - Pacserver.determinePacmanCacheDirectory(); + Console.WriteLine(Pacserver.determinePacmanCacheDirectory()); break; default: + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine("Possible options are: determinePacmanCacheDirectory"); + Console.ResetColor(); break; } } diff --git a/pacserver.cs b/pacserver.cs index 1dbf462..5ebad7e 100644 --- a/pacserver.cs +++ b/pacserver.cs @@ -3,7 +3,7 @@ using System.Text.RegularExpressions; public class Pacserver { public static string pacmanCacheDirectory { get; set; } = string.Empty; public static string determinePacmanCacheDirectory() { - // string defaultPacmanCacheDirectory = "/var/cache/pacman/pkg/"; + string defaultPacmanCacheDirectory = "/var/cache/pacman/pkg/"; Regex regex = new Regex(@"\/(?:[\w.-]+\/)*[\w.-]+(?:\.\w+)*\/?$"); // https://regex101.com/r/GwWeui/2 string? line; @@ -13,7 +13,11 @@ public class Pacserver { Match match = regex.Match(line); if (match.Success) { pacmanCacheDirectory = match.ToString(); + } else { + throw new Exception("Could not determine where pacman cache is! Would normally be found here " + defaultPacmanCacheDirectory); } + } else { + throw new Exception("Pacman config has no CacheDir specified!"); } } file.Close(); From 10ba654b09fe5b1c6796996f119950bb71a9305e Mon Sep 17 00:00:00 2001 From: ProfessionalUwU Date: Sat, 3 Jun 2023 14:55:11 +0200 Subject: [PATCH 4/5] Add dotnet format to justfile --- justfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/justfile b/justfile index c373111..d9cefc1 100644 --- a/justfile +++ b/justfile @@ -7,5 +7,8 @@ run: build: @dotnet build pacserver.csproj -publish: +publish: format @dotnet publish --configuration Release pacserver.csproj + +format: + @dotnet format From 9ad8012052ec3db93667b461a7895a58d35b5490 Mon Sep 17 00:00:00 2001 From: ProfessionalUwU Date: Sat, 3 Jun 2023 22:53:27 +0200 Subject: [PATCH 5/5] Major changes Changed the whole project struture justfile was adjusted to reflect the changes Add Tests Minor changes to .gitignore --- .gitignore | 4 +-- justfile | 11 +++++-- src/Pacserver.Tests/Pacserver.Tests.csproj | 28 ++++++++++++++++ src/Pacserver.Tests/Usings.cs | 1 + src/Pacserver.Tests/pacmanCache_Test.cs | 13 ++++++++ pacserver.cs => src/Pacserver/Pacserver.cs | 7 ++-- Program.cs => src/Pacserver/Program.cs | 6 ++-- .../Pacserver/pacserver.csproj | 0 src/pacserver.sln | 32 +++++++++++++++++++ 9 files changed, 91 insertions(+), 11 deletions(-) create mode 100644 src/Pacserver.Tests/Pacserver.Tests.csproj create mode 100644 src/Pacserver.Tests/Usings.cs create mode 100644 src/Pacserver.Tests/pacmanCache_Test.cs rename pacserver.cs => src/Pacserver/Pacserver.cs (86%) rename Program.cs => src/Pacserver/Program.cs (82%) rename pacserver.csproj => src/Pacserver/pacserver.csproj (100%) create mode 100644 src/pacserver.sln diff --git a/.gitignore b/.gitignore index e68f0aa..f73905c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ .vscode/ -obj/ -bin/ +[Oo]bj/ +[Bb]in/ diff --git a/justfile b/justfile index d9cefc1..86a9303 100644 --- a/justfile +++ b/justfile @@ -5,10 +5,15 @@ run: @dotnet run build: - @dotnet build pacserver.csproj + @dotnet build src/Pacserver/pacserver.csproj + @dotnet build src/Pacserver.Tests/Pacserver.Tests.csproj publish: format - @dotnet publish --configuration Release pacserver.csproj + @dotnet publish --configuration Release src/Pacserver/pacserver.csproj format: - @dotnet format + @dotnet format src/Pacserver + @dotnet format src/Pacserver.Tests + +test: build + @dotnet test src/Pacserver.Tests diff --git a/src/Pacserver.Tests/Pacserver.Tests.csproj b/src/Pacserver.Tests/Pacserver.Tests.csproj new file mode 100644 index 0000000..01cafe4 --- /dev/null +++ b/src/Pacserver.Tests/Pacserver.Tests.csproj @@ -0,0 +1,28 @@ + + + + net7.0 + enable + enable + linux-x64 + false + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/src/Pacserver.Tests/Usings.cs b/src/Pacserver.Tests/Usings.cs new file mode 100644 index 0000000..8c927eb --- /dev/null +++ b/src/Pacserver.Tests/Usings.cs @@ -0,0 +1 @@ +global using Xunit; \ No newline at end of file diff --git a/src/Pacserver.Tests/pacmanCache_Test.cs b/src/Pacserver.Tests/pacmanCache_Test.cs new file mode 100644 index 0000000..9305fd5 --- /dev/null +++ b/src/Pacserver.Tests/pacmanCache_Test.cs @@ -0,0 +1,13 @@ +using Pacserver.Utils; + +namespace Pacserver.Tests; + +public class pacmanCache_Test { + [Fact] + public void doesPacmanCacheExist() { + string result = PacserverUtils.determinePacmanCacheDirectory(); + + Assert.Equivalent(result, "/var/cache/pacman/pkg/"); + } +} + diff --git a/pacserver.cs b/src/Pacserver/Pacserver.cs similarity index 86% rename from pacserver.cs rename to src/Pacserver/Pacserver.cs index 5ebad7e..d8c5366 100644 --- a/pacserver.cs +++ b/src/Pacserver/Pacserver.cs @@ -1,13 +1,14 @@ using System.Text.RegularExpressions; -public class Pacserver { +namespace Pacserver.Utils; +public class PacserverUtils { public static string pacmanCacheDirectory { get; set; } = string.Empty; public static string determinePacmanCacheDirectory() { string defaultPacmanCacheDirectory = "/var/cache/pacman/pkg/"; Regex regex = new Regex(@"\/(?:[\w.-]+\/)*[\w.-]+(?:\.\w+)*\/?$"); // https://regex101.com/r/GwWeui/2 string? line; - StreamReader file = new StreamReader(@"/etc/pacman.conf"); + StreamReader file = new StreamReader("/etc/pacman.conf"); while ((line = file.ReadLine()) is not null) { if (line.Contains("CacheDir")) { Match match = regex.Match(line); @@ -16,8 +17,6 @@ public class Pacserver { } else { throw new Exception("Could not determine where pacman cache is! Would normally be found here " + defaultPacmanCacheDirectory); } - } else { - throw new Exception("Pacman config has no CacheDir specified!"); } } file.Close(); diff --git a/Program.cs b/src/Pacserver/Program.cs similarity index 82% rename from Program.cs rename to src/Pacserver/Program.cs index bb81872..3acc3ca 100644 --- a/Program.cs +++ b/src/Pacserver/Program.cs @@ -1,4 +1,6 @@ -public class Program { +using Pacserver.Utils; + +public class Program { static void Main(string[] args) { if (args.Length == 0) { Console.ForegroundColor = ConsoleColor.Red; @@ -7,7 +9,7 @@ } else { switch (args[0]) { case "determinePacmanCacheDirectory": - Console.WriteLine(Pacserver.determinePacmanCacheDirectory()); + Console.WriteLine(PacserverUtils.determinePacmanCacheDirectory()); break; default: Console.ForegroundColor = ConsoleColor.Yellow; diff --git a/pacserver.csproj b/src/Pacserver/pacserver.csproj similarity index 100% rename from pacserver.csproj rename to src/Pacserver/pacserver.csproj diff --git a/src/pacserver.sln b/src/pacserver.sln new file mode 100644 index 0000000..1c83224 --- /dev/null +++ b/src/pacserver.sln @@ -0,0 +1,32 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "pacserver", "Pacserver\pacserver.csproj", "{2B605458-AFBE-4A78-B4EA-9562C82BC932}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pacserver.Tests", "Pacserver.Tests\Pacserver.Tests.csproj", "{0B504958-E66D-4E32-AB22-19F94713AFCD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6FCF1241-CE3C-4A4A-8625-866A4E8E7623}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6FCF1241-CE3C-4A4A-8625-866A4E8E7623}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6FCF1241-CE3C-4A4A-8625-866A4E8E7623}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6FCF1241-CE3C-4A4A-8625-866A4E8E7623}.Release|Any CPU.Build.0 = Release|Any CPU + {2B605458-AFBE-4A78-B4EA-9562C82BC932}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2B605458-AFBE-4A78-B4EA-9562C82BC932}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B605458-AFBE-4A78-B4EA-9562C82BC932}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2B605458-AFBE-4A78-B4EA-9562C82BC932}.Release|Any CPU.Build.0 = Release|Any CPU + {0B504958-E66D-4E32-AB22-19F94713AFCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B504958-E66D-4E32-AB22-19F94713AFCD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B504958-E66D-4E32-AB22-19F94713AFCD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B504958-E66D-4E32-AB22-19F94713AFCD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal