From 3ed7201e21ebf298330ad5bfb766a02d4ba6a266 Mon Sep 17 00:00:00 2001 From: Francisco Gamino Date: Mon, 8 Aug 2016 22:33:57 -0700 Subject: [PATCH] Fixing get-help on Linux --- .../help/MUIFileSearcher.cs | 22 +++++++++++++++- .../help/UpdatableHelpSystem.cs | 8 +++++- src/powershell-unix/project.json | 3 ++- test/powershell/engine/HelpSystem.Tests.ps1 | 25 +++++++++++++++++++ 4 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 test/powershell/engine/HelpSystem.Tests.ps1 diff --git a/src/System.Management.Automation/help/MUIFileSearcher.cs b/src/System.Management.Automation/help/MUIFileSearcher.cs index 80fc85461f..263581df80 100644 --- a/src/System.Management.Automation/help/MUIFileSearcher.cs +++ b/src/System.Management.Automation/help/MUIFileSearcher.cs @@ -113,11 +113,31 @@ namespace System.Management.Automation } } + private string[] GetFiles(string path, string pattern) + { +#if UNIX + // On Linux, file names are case sensitive, so we need to add + // extra logic to select the files that match the given pattern. + ArrayList result = new ArrayList(); + string[] files = Directory.GetFiles(path); + foreach (string filePath in files) + { + if (filePath.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) >= 0) + { + result.Add(filePath); + } + } + return (String[])result.ToArray(typeof(string)); +#else + return Directory.GetFiles(path, pattern); +#endif + } + private void AddFiles(string muiDirectory, string directory, string pattern) { if (Directory.Exists(muiDirectory)) { - string[] files = Directory.GetFiles(muiDirectory, pattern); + string[] files = GetFiles(muiDirectory, pattern); if (files == null) return; diff --git a/src/System.Management.Automation/help/UpdatableHelpSystem.cs b/src/System.Management.Automation/help/UpdatableHelpSystem.cs index ad7d4c8661..d557ec6ef6 100644 --- a/src/System.Management.Automation/help/UpdatableHelpSystem.cs +++ b/src/System.Management.Automation/help/UpdatableHelpSystem.cs @@ -1489,7 +1489,7 @@ namespace System.Management.Automation.Help fileStream.Read(firstTwoBytes, 0, 2); - // Check for Mark Zbikowski’s magic initials + // Check for Mark Zbikowski's magic initials if (firstTwoBytes[0] == 'M' && firstTwoBytes[1] == 'Z') { throw new UpdatableHelpSystemException("HelpContentContainsInvalidFiles", @@ -1628,6 +1628,11 @@ namespace System.Management.Automation.Help /// internal static bool ShouldPromptToUpdateHelp() { +#if UNIX + // TODO: This workaround needs to be removed once updatable help + // works on Linux. + return false; +#else try { if (!Utils.IsAdministrator()) @@ -1641,6 +1646,7 @@ namespace System.Management.Automation.Help { return false; } +#endif } #endregion diff --git a/src/powershell-unix/project.json b/src/powershell-unix/project.json index 55511c10e1..ad4b11370a 100644 --- a/src/powershell-unix/project.json +++ b/src/powershell-unix/project.json @@ -55,7 +55,8 @@ "Microsoft.PowerShell.PSReadLine": "1.0.0-*", "libmi": "1.0.0-alpha01", "PSDesiredStateConfiguration": "1.0.0-alpha01", - "Microsoft.PowerShell.PackageManagement": "1.0.0-*" + "Microsoft.PowerShell.PackageManagement": "1.0.0-*", + "PowerShellHelpFiles": "1.0.0-alpha01" }, "frameworks": { diff --git a/test/powershell/engine/HelpSystem.Tests.ps1 b/test/powershell/engine/HelpSystem.Tests.ps1 new file mode 100644 index 0000000000..594d2f8c8f --- /dev/null +++ b/test/powershell/engine/HelpSystem.Tests.ps1 @@ -0,0 +1,25 @@ +Describe 'Basic help system tests' -Tags "CI" { + + Context "Validate help content for cmdlets in Microsof.PowerShell.Core" { + + $cmdlets = get-command -module "Microsoft.PowerShell.Core" + $cmdletsToSkip = @( + "Get-PSHostProcessInfo", + "Out-Default", + "Register-ArgumentCompleter" + ) + + foreach ($cmdletName in $cmdlets) + { + if ($cmdletsToSkip -notcontains $cmdletName) + { + It "Validate -Description and -Examples sections in help content. Run 'Get-help -name $cmdletName'" { + + $help = get-help -name $cmdletName + $help.Description | Out-String | Should Match $cmdletName + $help.Examples | Out-String | Should Match $cmdletName + } + } + } + } +}