From 575b1d9ce28ead999aecd329a931300f6f62ae7d Mon Sep 17 00:00:00 2001 From: "C. Augusto Proiete" Date: Sat, 10 Dec 2022 15:07:40 -0400 Subject: [PATCH] GH-4092 Add support for Environment.UserHomeDirectory --- src/Cake.Core/CakeEnvironment.cs | 6 ++++++ src/Cake.Core/ICakeEnvironment.cs | 6 ++++++ src/Cake.Core/IO/SpecialPath.cs | 7 ++++++- src/Cake.Core/Polyfill/SpecialPathHelper.cs | 5 +++++ src/Cake.Testing/FakeEnvironment.cs | 5 +++++ 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Cake.Core/CakeEnvironment.cs b/src/Cake.Core/CakeEnvironment.cs index f1ddc508d4..c2b208eaa0 100644 --- a/src/Cake.Core/CakeEnvironment.cs +++ b/src/Cake.Core/CakeEnvironment.cs @@ -20,6 +20,9 @@ public DirectoryPath WorkingDirectory set { SetWorkingDirectory(value); } } + /// + public DirectoryPath UserHomeDirectory { get; } + /// public DirectoryPath ApplicationRoot { get; } @@ -46,6 +49,9 @@ public CakeEnvironment(ICakePlatform platform, ICakeRuntime runtime) // Get the working directory. WorkingDirectory = new DirectoryPath(System.IO.Directory.GetCurrentDirectory()); + + // Get the Home directory. + UserHomeDirectory = GetSpecialPath(SpecialPath.UserProfile); } /// diff --git a/src/Cake.Core/ICakeEnvironment.cs b/src/Cake.Core/ICakeEnvironment.cs index 737c238787..eba1b80399 100644 --- a/src/Cake.Core/ICakeEnvironment.cs +++ b/src/Cake.Core/ICakeEnvironment.cs @@ -18,6 +18,12 @@ public interface ICakeEnvironment /// The working directory. DirectoryPath WorkingDirectory { get; set; } + /// + /// Gets the user's home directory. + /// + /// The user's home directory. + DirectoryPath UserHomeDirectory { get; } + /// /// Gets the application root path. /// diff --git a/src/Cake.Core/IO/SpecialPath.cs b/src/Cake.Core/IO/SpecialPath.cs index b7c18a3f3d..bd530668fd 100644 --- a/src/Cake.Core/IO/SpecialPath.cs +++ b/src/Cake.Core/IO/SpecialPath.cs @@ -45,6 +45,11 @@ public enum SpecialPath /// /// The current user's temporary folder. /// - LocalTemp + LocalTemp, + + /// + /// The user's profile folder. + /// + UserProfile, } } \ No newline at end of file diff --git a/src/Cake.Core/Polyfill/SpecialPathHelper.cs b/src/Cake.Core/Polyfill/SpecialPathHelper.cs index 208e6a9920..7e8e1501e7 100644 --- a/src/Cake.Core/Polyfill/SpecialPathHelper.cs +++ b/src/Cake.Core/Polyfill/SpecialPathHelper.cs @@ -17,6 +17,11 @@ public static DirectoryPath GetFolderPath(ICakePlatform platform, SpecialPath pa return new DirectoryPath(System.IO.Path.GetTempPath()); } + if (path == SpecialPath.UserProfile) + { + return new DirectoryPath(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)); + } + var result = GetXPlatFolderPath(platform, path); if (result != null) { diff --git a/src/Cake.Testing/FakeEnvironment.cs b/src/Cake.Testing/FakeEnvironment.cs index b744ed230b..85743ca495 100644 --- a/src/Cake.Testing/FakeEnvironment.cs +++ b/src/Cake.Testing/FakeEnvironment.cs @@ -23,6 +23,9 @@ public sealed class FakeEnvironment : ICakeEnvironment /// public DirectoryPath WorkingDirectory { get; set; } + /// + public DirectoryPath UserHomeDirectory { get; set; } + /// public DirectoryPath ApplicationRoot { get; set; } @@ -67,6 +70,7 @@ public static FakeEnvironment CreateUnixEnvironment(bool is64Bit = true) { var environment = new FakeEnvironment(PlatformFamily.Linux, is64Bit); environment.WorkingDirectory = new DirectoryPath("/Working"); + environment.UserHomeDirectory = new DirectoryPath("/Users/CakeUser"); environment.ApplicationRoot = "/Working/bin"; return environment; } @@ -80,6 +84,7 @@ public static FakeEnvironment CreateWindowsEnvironment(bool is64Bit = true) { var environment = new FakeEnvironment(PlatformFamily.Windows, is64Bit); environment.WorkingDirectory = new DirectoryPath("C:/Working"); + environment.UserHomeDirectory = new DirectoryPath("C:/Users/CakeUser"); environment.ApplicationRoot = "C:/Working/bin"; return environment; }