Skip to content

Commit

Permalink
refactored code to use extension method and added strings to resource…
Browse files Browse the repository at this point in the history
…s file
  • Loading branch information
Kartheek Penagamuri committed Apr 13, 2021
1 parent 05e11aa commit 9590c4a
Show file tree
Hide file tree
Showing 18 changed files with 507 additions and 26 deletions.
14 changes: 12 additions & 2 deletions src/Cli/dotnet/OptionForwardingExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,13 @@ public static ForwardedOption<string[]> ForwardAsProperty(this ForwardedOption<s

public static Option ForwardAsMany<T>(this ForwardedOption<T> option, Func<T, IEnumerable<string>> format) => option.SetForwardingFunction(format);

public static IEnumerable<string> OptionValuesToBeForwarded(this ParseResult parseResult, Command command) =>
public static Option ForwardAsManyArgumentsEachPrefixedByOption(this ForwardedOption<IEnumerable<string>> option, string alias) => option.ForwardAsMany(o => ForwardedArguments(alias, o));

public static IEnumerable<string> OptionValuesToBeForwarded(this ParseResult parseResult, Command command) =>
command.Options
.OfType<IForwardedOption>()
.SelectMany(o => o.GetForwardingFunction()(parseResult)) ?? Array.Empty<string>();


public static IEnumerable<string> ForwardedOptionValues<T>(this ParseResult parseResult, Command command, string alias) =>
command.Options?
.Where(o => o.Aliases.Contains(alias))?
Expand All @@ -41,6 +42,15 @@ public static Option AllowSingleArgPerToken(this Option option)
option.AllowMultipleArgumentsPerToken = false;
return option;
}

private static IEnumerable<string> ForwardedArguments(string alias, IEnumerable<string> arguments)
{
foreach (string arg in arguments)
{
yield return alias;
yield return arg;
}
}
}

public interface IForwardedOption
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ internal static class ListPackageReferencesCommandParser
public static readonly Option FrameworkOption = new ForwardedOption<IEnumerable<string>>("--framework", LocalizableStrings.CmdFrameworkDescription)
{
ArgumentHelpName = LocalizableStrings.CmdFramework
}.ForwardAsMany(o => ForwardedArguments("--framework", o))
}.ForwardAsManyArgumentsEachPrefixedByOption("--framework")
.AllowSingleArgPerToken();

public static readonly Option TransitiveOption = new ForwardedOption<bool>("--include-transitive", LocalizableStrings.CmdTransitiveDescription)
Expand All @@ -45,7 +45,7 @@ internal static class ListPackageReferencesCommandParser
public static readonly Option SourceOption = new ForwardedOption<IEnumerable<string>>("--source", LocalizableStrings.CmdSourceDescription)
{
ArgumentHelpName = LocalizableStrings.CmdSource
}.ForwardAsMany(o => ForwardedArguments("--source", o))
}.ForwardAsManyArgumentsEachPrefixedByOption("--source")
.AllowSingleArgPerToken();

public static readonly Option InteractiveOption = new ForwardedOption<bool>("--interactive", CommonLocalizableStrings.CommandInteractiveOptionDescription)
Expand All @@ -70,14 +70,5 @@ public static Command GetCommand()

return command;
}

public static IEnumerable<string> ForwardedArguments(string token, IEnumerable<string> arguments)
{
foreach (var arg in arguments)
{
yield return token;
yield return arg;
}
}
}
}
132 changes: 132 additions & 0 deletions src/Cli/dotnet/commands/dotnet-nuget/LocalizableStrings.resx
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AllOptionDescription" xml:space="preserve">
<value>Specifies that all verifications possible should be performed to the package(s).</value>
</data>
<data name="CertificateFingerPrintOptionDescription" xml:space="preserve">
<value>Verify that the signer certificate matches with one of the specified SHA256 fingerprints. A certificate SHA256 fingerprint is a SHA256 hash of the certificate used to identify the certificate. Use the option multiple times for multiple certificate fingerprints.</value>
</data>
<data name="PackagePathsArgumentDescription" xml:space="preserve">
<value>Specify the paths to the package(s).</value>
</data>
<data name="PackagePathsArgumentName" xml:space="preserve">
<value>&lt;package-paths&gt;</value>
</data>
</root>
22 changes: 9 additions & 13 deletions src/Cli/dotnet/commands/dotnet-nuget/NuGetCommandParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using System.Collections.Generic;
using System.CommandLine;
using LocalizableStrings = Microsoft.DotNet.Tools.NuGet.LocalizableStrings;

namespace Microsoft.DotNet.Cli
{
Expand Down Expand Up @@ -80,24 +81,19 @@ private static Command GetVerifyCommand()
const string fingerprint = "--certificate-fingerprint";
var verifyCommand = new Command("verify");

verifyCommand.AddArgument(new Argument<IEnumerable<string>>() { Arity = ArgumentArity.OneOrMore });
verifyCommand.AddArgument(new Argument<IEnumerable<string>>(LocalizableStrings.PackagePathsArgumentName)
{
Description = LocalizableStrings.PackagePathsArgumentDescription,
Arity = ArgumentArity.OneOrMore
});

verifyCommand.AddOption(new Option<bool>("--all"));
verifyCommand.AddOption(new ForwardedOption<IEnumerable<string>>(fingerprint, "certificatefingerprint")
.ForwardAsMany(o => ForwardedArguments(fingerprint, o))
verifyCommand.AddOption(new ForwardedOption<bool>("--all", LocalizableStrings.AllOptionDescription));
verifyCommand.AddOption(new ForwardedOption<IEnumerable<string>>(fingerprint, LocalizableStrings.CertificateFingerPrintOptionDescription)
.ForwardAsManyArgumentsEachPrefixedByOption(fingerprint)
.AllowSingleArgPerToken());
verifyCommand.AddOption(CommonOptions.VerbosityOption());

return verifyCommand;
}

private static IEnumerable<string> ForwardedArguments(string token, IEnumerable<string> arguments)
{
foreach (string arg in arguments)
{
yield return token;
yield return arg;
}
}
}
}
27 changes: 27 additions & 0 deletions src/Cli/dotnet/commands/dotnet-nuget/xlf/LocalizableStrings.cs.xlf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="cs" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AllOptionDescription">
<source>Specifies that all verifications possible should be performed to the package(s).</source>
<target state="new">Specifies that all verifications possible should be performed to the package(s).</target>
<note />
</trans-unit>
<trans-unit id="CertificateFingerPrintOptionDescription">
<source>Verify that the signer certificate matches with one of the specified SHA256 fingerprints. A certificate SHA256 fingerprint is a SHA256 hash of the certificate used to identify the certificate. Use the option multiple times for multiple certificate fingerprints.</source>
<target state="new">Verify that the signer certificate matches with one of the specified SHA256 fingerprints. A certificate SHA256 fingerprint is a SHA256 hash of the certificate used to identify the certificate. Use the option multiple times for multiple certificate fingerprints.</target>
<note />
</trans-unit>
<trans-unit id="PackagePathsArgumentDescription">
<source>Specify the paths to the package(s).</source>
<target state="new">Specify the paths to the package(s).</target>
<note />
</trans-unit>
<trans-unit id="PackagePathsArgumentName">
<source>&lt;package-paths&gt;</source>
<target state="new">&lt;package-paths&gt;</target>
<note />
</trans-unit>
</body>
</file>
</xliff>
27 changes: 27 additions & 0 deletions src/Cli/dotnet/commands/dotnet-nuget/xlf/LocalizableStrings.de.xlf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="de" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AllOptionDescription">
<source>Specifies that all verifications possible should be performed to the package(s).</source>
<target state="new">Specifies that all verifications possible should be performed to the package(s).</target>
<note />
</trans-unit>
<trans-unit id="CertificateFingerPrintOptionDescription">
<source>Verify that the signer certificate matches with one of the specified SHA256 fingerprints. A certificate SHA256 fingerprint is a SHA256 hash of the certificate used to identify the certificate. Use the option multiple times for multiple certificate fingerprints.</source>
<target state="new">Verify that the signer certificate matches with one of the specified SHA256 fingerprints. A certificate SHA256 fingerprint is a SHA256 hash of the certificate used to identify the certificate. Use the option multiple times for multiple certificate fingerprints.</target>
<note />
</trans-unit>
<trans-unit id="PackagePathsArgumentDescription">
<source>Specify the paths to the package(s).</source>
<target state="new">Specify the paths to the package(s).</target>
<note />
</trans-unit>
<trans-unit id="PackagePathsArgumentName">
<source>&lt;package-paths&gt;</source>
<target state="new">&lt;package-paths&gt;</target>
<note />
</trans-unit>
</body>
</file>
</xliff>
27 changes: 27 additions & 0 deletions src/Cli/dotnet/commands/dotnet-nuget/xlf/LocalizableStrings.es.xlf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="es" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AllOptionDescription">
<source>Specifies that all verifications possible should be performed to the package(s).</source>
<target state="new">Specifies that all verifications possible should be performed to the package(s).</target>
<note />
</trans-unit>
<trans-unit id="CertificateFingerPrintOptionDescription">
<source>Verify that the signer certificate matches with one of the specified SHA256 fingerprints. A certificate SHA256 fingerprint is a SHA256 hash of the certificate used to identify the certificate. Use the option multiple times for multiple certificate fingerprints.</source>
<target state="new">Verify that the signer certificate matches with one of the specified SHA256 fingerprints. A certificate SHA256 fingerprint is a SHA256 hash of the certificate used to identify the certificate. Use the option multiple times for multiple certificate fingerprints.</target>
<note />
</trans-unit>
<trans-unit id="PackagePathsArgumentDescription">
<source>Specify the paths to the package(s).</source>
<target state="new">Specify the paths to the package(s).</target>
<note />
</trans-unit>
<trans-unit id="PackagePathsArgumentName">
<source>&lt;package-paths&gt;</source>
<target state="new">&lt;package-paths&gt;</target>
<note />
</trans-unit>
</body>
</file>
</xliff>
27 changes: 27 additions & 0 deletions src/Cli/dotnet/commands/dotnet-nuget/xlf/LocalizableStrings.fr.xlf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="fr" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AllOptionDescription">
<source>Specifies that all verifications possible should be performed to the package(s).</source>
<target state="new">Specifies that all verifications possible should be performed to the package(s).</target>
<note />
</trans-unit>
<trans-unit id="CertificateFingerPrintOptionDescription">
<source>Verify that the signer certificate matches with one of the specified SHA256 fingerprints. A certificate SHA256 fingerprint is a SHA256 hash of the certificate used to identify the certificate. Use the option multiple times for multiple certificate fingerprints.</source>
<target state="new">Verify that the signer certificate matches with one of the specified SHA256 fingerprints. A certificate SHA256 fingerprint is a SHA256 hash of the certificate used to identify the certificate. Use the option multiple times for multiple certificate fingerprints.</target>
<note />
</trans-unit>
<trans-unit id="PackagePathsArgumentDescription">
<source>Specify the paths to the package(s).</source>
<target state="new">Specify the paths to the package(s).</target>
<note />
</trans-unit>
<trans-unit id="PackagePathsArgumentName">
<source>&lt;package-paths&gt;</source>
<target state="new">&lt;package-paths&gt;</target>
<note />
</trans-unit>
</body>
</file>
</xliff>
Loading

0 comments on commit 9590c4a

Please sign in to comment.