From 61b5dceb601ba06178959eeae4ac00bd2e838cd5 Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Mon, 12 Sep 2022 10:23:03 -0700 Subject: [PATCH] Make experimental feature `PSAnsiRenderingFileInfo` stable (#18042) --- experimental-feature-linux.json | 1 - experimental-feature-windows.json | 1 - .../ExperimentalFeature.cs | 3 - .../namespaces/FileSystemProvider.cs | 55 ++++++++----------- .../Get-Item.Tests.ps1 | 13 ----- 5 files changed, 22 insertions(+), 51 deletions(-) diff --git a/experimental-feature-linux.json b/experimental-feature-linux.json index a71c0c3ed2..94d88a4a8d 100644 --- a/experimental-feature-linux.json +++ b/experimental-feature-linux.json @@ -1,5 +1,4 @@ [ - "PSAnsiRenderingFileInfo", "PSCommandNotFoundSuggestion", "PSLoadAssemblyFromNativeCode", "PSNativeCommandErrorActionPreference", diff --git a/experimental-feature-windows.json b/experimental-feature-windows.json index a71c0c3ed2..94d88a4a8d 100644 --- a/experimental-feature-windows.json +++ b/experimental-feature-windows.json @@ -1,5 +1,4 @@ [ - "PSAnsiRenderingFileInfo", "PSCommandNotFoundSuggestion", "PSLoadAssemblyFromNativeCode", "PSNativeCommandErrorActionPreference", diff --git a/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs b/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs index 8c3e1c070e..6caea95de5 100644 --- a/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs +++ b/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs @@ -114,9 +114,6 @@ namespace System.Management.Automation new ExperimentalFeature( name: "PSLoadAssemblyFromNativeCode", description: "Expose an API to allow assembly loading from native code"), - new ExperimentalFeature( - name: "PSAnsiRenderingFileInfo", - description: "Enable coloring for FileInfo objects"), new ExperimentalFeature( name: PSNativeCommandErrorActionPreferenceFeatureName, description: "Native commands with non-zero exit codes issue errors according to $ErrorActionPreference when $PSNativeCommandUseErrorActionPreference is $true"), diff --git a/src/System.Management.Automation/namespaces/FileSystemProvider.cs b/src/System.Management.Automation/namespaces/FileSystemProvider.cs index 3c0aeaddc7..07625fc2ab 100644 --- a/src/System.Management.Automation/namespaces/FileSystemProvider.cs +++ b/src/System.Management.Automation/namespaces/FileSystemProvider.cs @@ -2068,43 +2068,32 @@ namespace Microsoft.PowerShell.Commands /// Name if a file or directory, Name -> Target if symlink. public static string NameString(PSObject instance) { - if (ExperimentalFeature.IsEnabled("PSAnsiRenderingFileInfo")) + if (instance?.BaseObject is FileSystemInfo fileInfo) { - if (instance?.BaseObject is FileSystemInfo fileInfo) + if (InternalSymbolicLinkLinkCodeMethods.IsReparsePointLikeSymlink(fileInfo)) { - if (InternalSymbolicLinkLinkCodeMethods.IsReparsePointLikeSymlink(fileInfo)) - { - return $"{PSStyle.Instance.FileInfo.SymbolicLink}{fileInfo.Name}{PSStyle.Instance.Reset} -> {fileInfo.LinkTarget}"; - } - else if (fileInfo.Attributes.HasFlag(FileAttributes.Directory)) - { - return $"{PSStyle.Instance.FileInfo.Directory}{fileInfo.Name}{PSStyle.Instance.Reset}"; - } - else if (PSStyle.Instance.FileInfo.Extension.ContainsKey(fileInfo.Extension)) - { - return $"{PSStyle.Instance.FileInfo.Extension[fileInfo.Extension]}{fileInfo.Name}{PSStyle.Instance.Reset}"; - } - else if ((Platform.IsWindows && CommandDiscovery.PathExtensions.Contains(fileInfo.Extension.ToLower())) || - (!Platform.IsWindows && Platform.NonWindowsIsExecutable(fileInfo.FullName))) - { - return $"{PSStyle.Instance.FileInfo.Executable}{fileInfo.Name}{PSStyle.Instance.Reset}"; - } - else - { - return fileInfo.Name; - } + return $"{PSStyle.Instance.FileInfo.SymbolicLink}{fileInfo.Name}{PSStyle.Instance.Reset} -> {fileInfo.LinkTarget}"; } + else if (fileInfo.Attributes.HasFlag(FileAttributes.Directory)) + { + return $"{PSStyle.Instance.FileInfo.Directory}{fileInfo.Name}{PSStyle.Instance.Reset}"; + } + else if (PSStyle.Instance.FileInfo.Extension.ContainsKey(fileInfo.Extension)) + { + return $"{PSStyle.Instance.FileInfo.Extension[fileInfo.Extension]}{fileInfo.Name}{PSStyle.Instance.Reset}"; + } + else if ((Platform.IsWindows && CommandDiscovery.PathExtensions.Contains(fileInfo.Extension.ToLower())) || + (!Platform.IsWindows && Platform.NonWindowsIsExecutable(fileInfo.FullName))) + { + return $"{PSStyle.Instance.FileInfo.Executable}{fileInfo.Name}{PSStyle.Instance.Reset}"; + } + else + { + return fileInfo.Name; + } + } - return string.Empty; - } - else - { - return instance?.BaseObject is FileSystemInfo fileInfo - ? InternalSymbolicLinkLinkCodeMethods.IsReparsePointLikeSymlink(fileInfo) - ? $"{fileInfo.Name} -> {fileInfo.LinkTarget}" - : fileInfo.Name - : string.Empty; - } + return string.Empty; } /// diff --git a/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Item.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Item.Tests.ps1 index 35c05b1bb1..4efc250e0d 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Item.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Item.Tests.ps1 @@ -208,17 +208,12 @@ Describe "Get-Item environment provider on Windows with accidental case-variant Describe 'Formatting for FileInfo objects' -Tags 'CI' { BeforeAll { - $PSDefaultParameterValues.Add('It:Skip', (-not $EnabledExperimentalFeatures.Contains('PSAnsiRenderingFileInfo'))) $extensionTests = [System.Collections.Generic.List[HashTable]]::new() foreach ($extension in @('.zip', '.tgz', '.tar', '.gz', '.nupkg', '.cab', '.7z', '.ps1', '.psd1', '.psm1', '.ps1xml')) { $extensionTests.Add(@{extension = $extension}) } } - AfterAll { - $PSDefaultParameterValues.Remove('It:Skip') - } - It 'File type should have correct color' -TestCases $extensionTests { param($extension) @@ -250,14 +245,6 @@ Describe 'Formatting for FileInfo objects' -Tags 'CI' { } Describe 'Formatting for FileInfo requiring admin' -Tags 'CI','RequireAdminOnWindows' { - BeforeAll { - $PSDefaultParameterValues.Add('It:Skip', (-not $EnabledExperimentalFeatures.Contains('PSAnsiRenderingFileInfo'))) - } - - AfterAll { - $PSDefaultParameterValues.Remove('It:Skip') - } - It 'Symlink should have correct color' { $linkPath = Join-Path -Path $TestDrive -ChildPath 'link' $link = New-Item -ItemType SymbolicLink -Name 'link' -Value $TestDrive -Path $TestDrive