Skip to content

Commit 4860c8e

Browse files
corbobgep13
authored andcommitted
(chocolatey#2591) Add headers to limit output commands
When a user asks for limited output from Chocolatey, it is not uncommon to pipe that output to `ConvertFrom-String` or `ConvertFrom-Csv` and manually add headers to get back an object. This allows for getting a header row back so that the end user doesn't need to add their own headers and discern what they are. This also adds a StringResources static class that allows us to store constant strings in and use them across the code to reduce duplication.
1 parent 9c86306 commit 4860c8e

17 files changed

+227
-6
lines changed

src/chocolatey/StringResources.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,15 @@ public static class EnvironmentVariables
5656
[Browsable(false)]
5757
internal const string PackageNuspecVersion = "packageNuspecVersion";
5858
}
59+
60+
public static class OptionDescriptions
61+
{
62+
public const string DISPLAY_HEADERS = "Display headers - Display headers when limit-output is used. Requires 2.3.0";
63+
}
64+
65+
public static class Options
66+
{
67+
public const string DISPLAY_HEADERS = "headers"; // TODO: This option name needs to be decided and agreed upon.
68+
}
5969
}
60-
}
70+
}

src/chocolatey/infrastructure.app/ApplicationParameters.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ public static class Features
243243
public static readonly string UsePackageRepositoryOptimizations = "usePackageRepositoryOptimizations";
244244
public static readonly string DisableCompatibilityChecks = "disableCompatibilityChecks";
245245
public static readonly string UsePackageHashValidation = "usePackageHashValidation";
246+
public static readonly string AlwaysDisplayHeaders = "alwaysDisplayHeaders";
246247
}
247248

248249
public static class Messages

src/chocolatey/infrastructure.app/builders/ConfigurationBuilder.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,8 @@ private static void SetAllFeatureFlags(ChocolateyConfiguration config, ConfigFil
340340
config.Features.UsePackageRepositoryOptimizations = SetFeatureFlag(ApplicationParameters.Features.UsePackageRepositoryOptimizations, configFileSettings, defaultEnabled: true, description: "Use Package Repository Optimizations - Turn on optimizations for reducing bandwidth with repository queries during package install/upgrade/outdated operations. Should generally be left enabled, unless a repository needs to support older methods of query. When disabled, this makes queries similar to the way they were done in earlier versions of Chocolatey.");
341341
config.Features.UsePackageHashValidation = SetFeatureFlag(ApplicationParameters.Features.UsePackageHashValidation, configFileSettings, defaultEnabled: false, description: "Use Package Hash Validation - Check the hash of the downloaded package file against the source provided hash. Only supports sources that provide SHA512 hashes. Disabled by default. Available in 2.3.0+");
342342
config.PromptForConfirmation = !SetFeatureFlag(ApplicationParameters.Features.AllowGlobalConfirmation, configFileSettings, defaultEnabled: false, description: "Prompt for confirmation in scripts or bypass.");
343-
config.DisableCompatibilityChecks = SetFeatureFlag(ApplicationParameters.Features.DisableCompatibilityChecks, configFileSettings, defaultEnabled: false, description: "Disable Compatibility Checks - Disable showing a warning when there is an incompatibility between Chocolatey CLI and Chocolatey Licensed Extension.");
343+
config.DisableCompatibilityChecks = SetFeatureFlag(ApplicationParameters.Features.DisableCompatibilityChecks, configFileSettings, defaultEnabled: false, description: "Disable Compatibility Checks - Disable showing a warning when there is an incompatibility between Chocolatey CLI and Chocolatey Licensed Extension. Available in 1.1.0+");
344+
config.DisplayHeaders = SetFeatureFlag(ApplicationParameters.Features.AlwaysDisplayHeaders, configFileSettings, defaultEnabled: false, description: StringResources.OptionDescriptions.DISPLAY_HEADERS);
344345
}
345346

346347
private static bool SetFeatureFlag(string featureName, ConfigFileSettings configFileSettings, bool defaultEnabled, string description)

src/chocolatey/infrastructure.app/commands/ChocolateyApiKeyCommand.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ public virtual void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConfi
5050
.Add("k=|key=|apikey=|api-key=",
5151
"ApiKey - The API key for the source. This is the authentication that identifies you and allows you to push to a source. With some sources this is either a key or it could be a user name and password specified as 'user:password'.",
5252
option => configuration.ApiKeyCommand.Key = option.UnquoteSafe())
53+
.Add(StringResources.Options.DISPLAY_HEADERS,
54+
StringResources.OptionDescriptions.DISPLAY_HEADERS,
55+
option => configuration.DisplayHeaders = true)
5356
;
5457
}
5558

@@ -197,6 +200,11 @@ public virtual void Run(ChocolateyConfiguration configuration)
197200
_configSettingsService.SetApiKey(configuration);
198201
break;
199202
default:
203+
if (!configuration.RegularOutput && configuration.DisplayHeaders)
204+
{
205+
this.Log().Info("Source|Key");
206+
}
207+
200208
_configSettingsService.GetApiKey(configuration, (key) =>
201209
{
202210
var authenticatedString = string.IsNullOrWhiteSpace(key.Key) ? string.Empty : "(Authenticated)";

src/chocolatey/infrastructure.app/commands/ChocolateyConfigCommand.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ public virtual void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConfi
5151
"value=",
5252
"Value - the value of the config setting. Required with some actions. Defaults to empty.",
5353
option => configuration.ConfigCommand.ConfigValue = option.UnquoteSafe())
54+
.Add(
55+
StringResources.Options.DISPLAY_HEADERS,
56+
StringResources.OptionDescriptions.DISPLAY_HEADERS,
57+
option => configuration.DisplayHeaders = true)
5458
;
5559
}
5660

src/chocolatey/infrastructure.app/commands/ChocolateyFeatureCommand.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ public virtual void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConfi
4747
.Add("n=|name=",
4848
"Name - the name of the source. Required with actions other than list. Defaults to empty.",
4949
option => configuration.FeatureCommand.Name = option.UnquoteSafe())
50+
.Add(StringResources.Options.DISPLAY_HEADERS,
51+
StringResources.OptionDescriptions.DISPLAY_HEADERS,
52+
option => configuration.DisplayHeaders = true)
5053
;
5154
}
5255

src/chocolatey/infrastructure.app/commands/ChocolateyInfoCommand.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ public override void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConf
7777
.Add("include-configured-sources",
7878
"Include Configured Sources - When using the '--source' option, this appends the sources that have been saved into the chocolatey.config file by 'source' command. Available in 2.3.0+",
7979
option => configuration.IncludeConfiguredSources = option != null)
80+
.Add(StringResources.Options.DISPLAY_HEADERS,
81+
StringResources.OptionDescriptions.DISPLAY_HEADERS,
82+
option => configuration.DisplayHeaders = true)
8083
;
8184
}
8285

src/chocolatey/infrastructure.app/commands/ChocolateyListCommand.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,10 @@ public virtual void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConfi
137137
option => configuration.ListCommand.IdStartsWith = option != null)
138138
.Add("detail|detailed",
139139
"Detailed - Alias for verbose.",
140-
option => configuration.Verbose = option != null);
140+
option => configuration.Verbose = option != null)
141+
.Add(StringResources.Options.DISPLAY_HEADERS,
142+
StringResources.OptionDescriptions.DISPLAY_HEADERS,
143+
option => configuration.DisplayHeaders = true);
141144
}
142145

143146
public virtual int Count(ChocolateyConfiguration config)

src/chocolatey/infrastructure.app/commands/ChocolateyOutdatedCommand.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ public virtual void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConfi
7575
.Add("include-configured-sources",
7676
"Include Configured Sources - When using the '--source' option, this appends the sources that have been saved into the chocolatey.config file by 'source' command. Available in 2.3.0+",
7777
option => configuration.IncludeConfiguredSources = option != null)
78+
.Add(StringResources.Options.DISPLAY_HEADERS,
79+
StringResources.OptionDescriptions.DISPLAY_HEADERS,
80+
option => configuration.DisplayHeaders = true)
7881
;
7982
}
8083

src/chocolatey/infrastructure.app/commands/ChocolateyPinCommand.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ public virtual void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConfi
5656
.Add("version=",
5757
"Version - Used when multiple versions of a package are installed. Defaults to empty.",
5858
option => configuration.Version = option.UnquoteSafe())
59+
.Add(StringResources.Options.DISPLAY_HEADERS,
60+
StringResources.OptionDescriptions.DISPLAY_HEADERS,
61+
option => configuration.DisplayHeaders = true)
5962
;
6063
}
6164

@@ -178,6 +181,11 @@ public virtual void ListPins(ChocolateyConfiguration config)
178181
config.QuietOutput = quiet;
179182
config.Input = input;
180183

184+
if (!config.RegularOutput && config.DisplayHeaders)
185+
{
186+
this.Log().Info("PackageId|Version");
187+
}
188+
181189
foreach (var pkg in packages.OrEmpty())
182190
{
183191
var pkgInfo = _packageInfoService.Get(pkg.PackageMetadata);

0 commit comments

Comments
 (0)