From c75d2e446e5782b260f826e959daa2a1a91eb56c Mon Sep 17 00:00:00 2001 From: Krzysztof Wicher Date: Thu, 23 Feb 2017 11:24:36 -0800 Subject: [PATCH] reduce some repetition --- src/dotnet/commands/dotnet-build/Program.cs | 16 +--- .../commands/dotnet-cache/CacheCommand.cs | 95 ------------------- src/dotnet/commands/dotnet-cache/Program.cs | 91 ++++++++++++------ src/dotnet/commands/dotnet-clean/Program.cs | 18 +--- .../commands/dotnet-pack/PackCommand.cs | 18 +--- src/dotnet/commands/dotnet-publish/Program.cs | 82 +++++++++++----- .../commands/dotnet-publish/PublishCommand.cs | 83 ---------------- .../dotnet-vstest/VSTestForwardingApp.cs | 19 +--- 8 files changed, 131 insertions(+), 291 deletions(-) delete mode 100644 src/dotnet/commands/dotnet-cache/CacheCommand.cs delete mode 100644 src/dotnet/commands/dotnet-publish/PublishCommand.cs diff --git a/src/dotnet/commands/dotnet-build/Program.cs b/src/dotnet/commands/dotnet-build/Program.cs index abd9b2675..1bf412224 100644 --- a/src/dotnet/commands/dotnet-build/Program.cs +++ b/src/dotnet/commands/dotnet-build/Program.cs @@ -11,13 +11,11 @@ using Microsoft.DotNet.Cli; namespace Microsoft.DotNet.Tools.Build { - public class BuildCommand + public class BuildCommand : MSBuildForwardingApp { - private MSBuildForwardingApp _forwardingApp; - public BuildCommand(IEnumerable msbuildArgs, string msbuildPath = null) + : base(msbuildArgs, msbuildPath) { - _forwardingApp = new MSBuildForwardingApp(msbuildArgs, msbuildPath); } public static BuildCommand FromArgs(string[] args, string msbuildPath = null) @@ -132,15 +130,5 @@ namespace Microsoft.DotNet.Tools.Build return cmd.Execute(); } - - public ProcessStartInfo GetProcessStartInfo() - { - return _forwardingApp.GetProcessStartInfo(); - } - - public int Execute() - { - return GetProcessStartInfo().Execute(); - } } } diff --git a/src/dotnet/commands/dotnet-cache/CacheCommand.cs b/src/dotnet/commands/dotnet-cache/CacheCommand.cs deleted file mode 100644 index 4d5bc4022..000000000 --- a/src/dotnet/commands/dotnet-cache/CacheCommand.cs +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using System; -using System.Linq; -using System.Collections.Generic; -using System.IO; -using Microsoft.DotNet.Cli.Utils; -using Microsoft.DotNet.Tools.MSBuild; -using Microsoft.DotNet.Tools.Restore; -using Microsoft.DotNet.Cli.CommandLine; - -namespace Microsoft.DotNet.Tools.Cache -{ - public partial class CacheCommand - { - private string _msbuildPath; - - public string ProjectArgument { get; set; } - public string Framework { get; set; } - public string Runtime { get; set; } - public string OutputPath { get; set; } - public string FrameworkVersion { get; set; } - public string IntermediateDir { get; set; } - public string Verbosity { get; set; } - private bool SkipOptimization { get; set; } - private bool PreserveIntermediateDir { get; set; } - - public List ExtraMSBuildArguments { get; set; } - - private CacheCommand(string msbuildPath = null) - { - _msbuildPath = msbuildPath; - } - - private MSBuildForwardingApp CreateForwardingApp(string msbuildPath) - { - var msbuildArgs = new List(); - - if (string.IsNullOrEmpty(ProjectArgument)) - { - throw new InvalidOperationException(LocalizableStrings.SpecifyEntries); - } - - msbuildArgs.Add("/t:ComposeCache"); - msbuildArgs.Add(ProjectArgument); - - if (!string.IsNullOrEmpty(Framework)) - { - msbuildArgs.Add($"/p:TargetFramework={Framework}"); - } - - if (!string.IsNullOrEmpty(Runtime)) - { - msbuildArgs.Add($"/p:RuntimeIdentifier={Runtime}"); - } - - if (!string.IsNullOrEmpty(OutputPath)) - { - OutputPath = Path.GetFullPath(OutputPath); - msbuildArgs.Add($"/p:ComposeDir={OutputPath}"); - } - - if (!string.IsNullOrEmpty(FrameworkVersion)) - { - msbuildArgs.Add($"/p:FX_Version={FrameworkVersion}"); - } - - if (!string.IsNullOrEmpty(IntermediateDir)) - { - msbuildArgs.Add($"/p:ComposeWorkingDir={IntermediateDir}"); - } - - if (SkipOptimization) - { - msbuildArgs.Add($"/p:SkipOptimization={SkipOptimization}"); - } - - if (PreserveIntermediateDir) - { - msbuildArgs.Add($"/p:PreserveComposeWorkingDir={PreserveIntermediateDir}"); - } - - if (!string.IsNullOrEmpty(Verbosity)) - { - msbuildArgs.Add($"/verbosity:{Verbosity}"); - } - - msbuildArgs.AddRange(ExtraMSBuildArguments); - - return new MSBuildForwardingApp(msbuildArgs, msbuildPath); - } - } -} - diff --git a/src/dotnet/commands/dotnet-cache/Program.cs b/src/dotnet/commands/dotnet-cache/Program.cs index b51dbeea2..2e995ea42 100644 --- a/src/dotnet/commands/dotnet-cache/Program.cs +++ b/src/dotnet/commands/dotnet-cache/Program.cs @@ -7,11 +7,18 @@ using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.Tools.MSBuild; using Microsoft.DotNet.Cli; using System.Diagnostics; +using System; +using System.IO; namespace Microsoft.DotNet.Tools.Cache { - public partial class CacheCommand + public partial class CacheCommand : MSBuildForwardingApp { + private CacheCommand(IEnumerable msbuildArgs, string msbuildPath = null) + : base(msbuildArgs, msbuildPath) + { + } + public static CacheCommand FromArgs(string[] args, string msbuildPath = null) { DebugHelper.HandleDebugSwitch(ref args); @@ -58,32 +65,72 @@ namespace Microsoft.DotNet.Tools.Cache CommandOption verbosityOption = MSBuildForwardingApp.AddVerbosityOption(app); - var cache = new CacheCommand(msbuildPath); - bool commandExecuted = false; + List msbuildArgs = null; app.OnExecute(() => { - commandExecuted = true; - cache.Framework = frameworkOption.Value(); - cache.Runtime = runtimeOption.Value(); - cache.OutputPath = outputOption.Value(); - cache.FrameworkVersion = fxOption.Value(); - cache.Verbosity = verbosityOption.Value(); - cache.SkipOptimization = skipOptimizationOption.HasValue(); - cache.IntermediateDir = workingDir.Value(); - cache.PreserveIntermediateDir = preserveWorkingDir.HasValue(); - cache.ExtraMSBuildArguments = app.RemainingArguments; - cache.ProjectArgument = projectArgument.Value(); - + msbuildArgs = new List(); + + if (string.IsNullOrEmpty(projectArgument.Value())) + { + throw new InvalidOperationException(LocalizableStrings.SpecifyEntries); + } + + msbuildArgs.Add("/t:ComposeCache"); + msbuildArgs.Add(projectArgument.Value()); + + if (!string.IsNullOrEmpty(frameworkOption.Value())) + { + msbuildArgs.Add($"/p:TargetFramework={frameworkOption.Value()}"); + } + + if (!string.IsNullOrEmpty(runtimeOption.Value())) + { + msbuildArgs.Add($"/p:RuntimeIdentifier={runtimeOption.Value()}"); + } + + if (!string.IsNullOrEmpty(outputOption.Value())) + { + var outputPath = Path.GetFullPath(outputOption.Value()); + msbuildArgs.Add($"/p:ComposeDir={outputPath}"); + } + + if (!string.IsNullOrEmpty(fxOption.Value())) + { + msbuildArgs.Add($"/p:FX_Version={fxOption.Value()}"); + } + + if (!string.IsNullOrEmpty(workingDir.Value())) + { + msbuildArgs.Add($"/p:ComposeWorkingDir={workingDir.Value()}"); + } + + if (skipOptimizationOption.HasValue()) + { + msbuildArgs.Add($"/p:SkipOptimization={skipOptimizationOption.HasValue()}"); + } + + if (preserveWorkingDir.HasValue()) + { + msbuildArgs.Add($"/p:PreserveComposeWorkingDir={preserveWorkingDir.HasValue()}"); + } + + if (!string.IsNullOrEmpty(verbosityOption.Value())) + { + msbuildArgs.Add($"/verbosity:{verbosityOption.Value()}"); + } + + msbuildArgs.AddRange(app.RemainingArguments); + return 0; }); int exitCode = app.Execute(args); - if (!commandExecuted) + if (msbuildArgs == null) { throw new CommandCreationException(exitCode); } - return cache; + return new CacheCommand(msbuildArgs, msbuildPath); } public static int Run(string[] args) @@ -102,15 +149,5 @@ namespace Microsoft.DotNet.Tools.Cache return cmd.Execute(); } - - public ProcessStartInfo GetProcessStartInfo() - { - return CreateForwardingApp(_msbuildPath).GetProcessStartInfo(); - } - - public int Execute() - { - return GetProcessStartInfo().Execute(); - } } } diff --git a/src/dotnet/commands/dotnet-clean/Program.cs b/src/dotnet/commands/dotnet-clean/Program.cs index 72ad61575..f76e25b84 100644 --- a/src/dotnet/commands/dotnet-clean/Program.cs +++ b/src/dotnet/commands/dotnet-clean/Program.cs @@ -10,13 +10,11 @@ using System.Diagnostics; namespace Microsoft.DotNet.Tools.Clean { - public class CleanCommand + public class CleanCommand : MSBuildForwardingApp { - private MSBuildForwardingApp _forwardingApp; - public CleanCommand(IEnumerable msbuildArgs, string msbuildPath = null) + : base(msbuildArgs, msbuildPath) { - _forwardingApp = new MSBuildForwardingApp(msbuildArgs, msbuildPath); } public static CleanCommand FromArgs(string[] args, string msbuildPath = null) @@ -49,7 +47,7 @@ namespace Microsoft.DotNet.Tools.Clean $"-c|--configuration <{LocalizableStrings.CmdConfiguration}>", LocalizableStrings.CmdConfigurationDescription, CommandOptionType.SingleValue); - CommandOption verbosityOption = MSBuildForwardingApp.AddVerbosityOption(app); + CommandOption verbosityOption = AddVerbosityOption(app); List msbuildArgs = null; app.OnExecute(() => @@ -113,15 +111,5 @@ namespace Microsoft.DotNet.Tools.Clean return cmd.Execute(); } - - public ProcessStartInfo GetProcessStartInfo() - { - return _forwardingApp.GetProcessStartInfo(); - } - - public int Execute() - { - return GetProcessStartInfo().Execute(); - } } } diff --git a/src/dotnet/commands/dotnet-pack/PackCommand.cs b/src/dotnet/commands/dotnet-pack/PackCommand.cs index ee371f109..31de05df5 100644 --- a/src/dotnet/commands/dotnet-pack/PackCommand.cs +++ b/src/dotnet/commands/dotnet-pack/PackCommand.cs @@ -10,13 +10,11 @@ using System.Diagnostics; namespace Microsoft.DotNet.Tools.Pack { - public class PackCommand + public class PackCommand : MSBuildForwardingApp { - private MSBuildForwardingApp _forwardingApp; - public PackCommand(IEnumerable msbuildArgs, string msbuildPath = null) + : base(msbuildArgs, msbuildPath) { - _forwardingApp = new MSBuildForwardingApp(msbuildArgs, msbuildPath); } public static PackCommand FromArgs(string[] args, string msbuildPath = null) @@ -66,7 +64,7 @@ namespace Microsoft.DotNet.Tools.Pack $"<{LocalizableStrings.CmdArgumentProject}>", LocalizableStrings.CmdArgumentDescription, multipleValues:true); - CommandOption verbosityOption = MSBuildForwardingApp.AddVerbosityOption(cmd); + CommandOption verbosityOption = AddVerbosityOption(cmd); List msbuildArgs = null; cmd.OnExecute(() => @@ -147,15 +145,5 @@ namespace Microsoft.DotNet.Tools.Pack return cmd.Execute(); } - - public ProcessStartInfo GetProcessStartInfo() - { - return _forwardingApp.GetProcessStartInfo(); - } - - public int Execute() - { - return GetProcessStartInfo().Execute(); - } } } diff --git a/src/dotnet/commands/dotnet-publish/Program.cs b/src/dotnet/commands/dotnet-publish/Program.cs index 404090036..c74db0d40 100644 --- a/src/dotnet/commands/dotnet-publish/Program.cs +++ b/src/dotnet/commands/dotnet-publish/Program.cs @@ -5,12 +5,18 @@ using Microsoft.DotNet.Cli; using Microsoft.DotNet.Cli.CommandLine; using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.Tools.MSBuild; +using System.Collections.Generic; using System.Diagnostics; namespace Microsoft.DotNet.Tools.Publish { - public partial class PublishCommand + public partial class PublishCommand : MSBuildForwardingApp { + private PublishCommand(IEnumerable msbuildArgs, string msbuildPath = null) + : base(msbuildArgs, msbuildPath) + { + } + public static PublishCommand FromArgs(string[] args, string msbuildPath = null) { DebugHelper.HandleDebugSwitch(ref args); @@ -50,33 +56,67 @@ namespace Microsoft.DotNet.Tools.Publish $"--filter <{LocalizableStrings.FilterProjOption}>", LocalizableStrings.FilterProjOptionDescription, CommandOptionType.SingleValue); - CommandOption verbosityOption = MSBuildForwardingApp.AddVerbosityOption(app); + CommandOption verbosityOption = AddVerbosityOption(app); - var publish = new PublishCommand(msbuildPath); - bool commandExecuted = false; + List msbuildArgs = null; app.OnExecute(() => { - commandExecuted = true; - publish.ProjectPath = projectArgument.Value; - publish.Framework = frameworkOption.Value(); - publish.Runtime = runtimeOption.Value(); - publish.OutputPath = outputOption.Value(); - publish.Configuration = configurationOption.Value(); - publish.VersionSuffix = versionSuffixOption.Value(); - publish.FilterProject = filterProjOption.Value(); - publish.Verbosity = verbosityOption.Value(); - publish.ExtraMSBuildArguments = app.RemainingArguments; + msbuildArgs = new List(); + + msbuildArgs.Add("/t:Publish"); + + if (!string.IsNullOrEmpty(projectArgument.Value)) + { + msbuildArgs.Add(projectArgument.Value); + } + + if (!string.IsNullOrEmpty(frameworkOption.Value())) + { + msbuildArgs.Add($"/p:TargetFramework={frameworkOption.Value()}"); + } + + if (!string.IsNullOrEmpty(runtimeOption.Value())) + { + msbuildArgs.Add($"/p:RuntimeIdentifier={runtimeOption.Value()}"); + } + + if (!string.IsNullOrEmpty(outputOption.Value())) + { + msbuildArgs.Add($"/p:PublishDir={outputOption.Value()}"); + } + + if (!string.IsNullOrEmpty(configurationOption.Value())) + { + msbuildArgs.Add($"/p:Configuration={configurationOption.Value()}"); + } + + if (!string.IsNullOrEmpty(versionSuffixOption.Value())) + { + msbuildArgs.Add($"/p:VersionSuffix={versionSuffixOption.Value()}"); + } + + if (!string.IsNullOrEmpty(filterProjOption.Value())) + { + msbuildArgs.Add($"/p:FilterProjFile={filterProjOption.Value()}"); + } + + if (!string.IsNullOrEmpty(verbosityOption.Value())) + { + msbuildArgs.Add($"/verbosity:{verbosityOption.Value()}"); + } + + msbuildArgs.AddRange(app.RemainingArguments); return 0; }); int exitCode = app.Execute(args); - if (!commandExecuted) + if (msbuildArgs == null) { throw new CommandCreationException(exitCode); } - return publish; + return new PublishCommand(msbuildArgs, msbuildPath); } public static int Run(string[] args) @@ -95,15 +135,5 @@ namespace Microsoft.DotNet.Tools.Publish return cmd.Execute(); } - - public ProcessStartInfo GetProcessStartInfo() - { - return CreateForwardingApp(_msbuildPath).GetProcessStartInfo(); - } - - public int Execute() - { - return GetProcessStartInfo().Execute(); - } } } diff --git a/src/dotnet/commands/dotnet-publish/PublishCommand.cs b/src/dotnet/commands/dotnet-publish/PublishCommand.cs deleted file mode 100644 index 162927902..000000000 --- a/src/dotnet/commands/dotnet-publish/PublishCommand.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using System.Linq; -using System.Collections.Generic; -using Microsoft.DotNet.Cli.Utils; -using Microsoft.DotNet.Tools.MSBuild; -using Microsoft.DotNet.Tools.Restore; - -namespace Microsoft.DotNet.Tools.Publish -{ - public partial class PublishCommand - { - private string _msbuildPath; - - public string ProjectPath { get; set; } - public string Framework { get; set; } - public string Runtime { get; set; } - public string OutputPath { get; set; } - public string Configuration { get; set; } - public string VersionSuffix { get; set; } - public string FilterProject { get; set; } - public string Verbosity { get; set; } - - public List ExtraMSBuildArguments { get; set; } - - private PublishCommand(string msbuildPath = null) - { - _msbuildPath = msbuildPath; - } - - private MSBuildForwardingApp CreateForwardingApp(string msbuildPath) - { - List msbuildArgs = new List(); - - msbuildArgs.Add("/t:Publish"); - - if (!string.IsNullOrEmpty(ProjectPath)) - { - msbuildArgs.Add(ProjectPath); - } - - if (!string.IsNullOrEmpty(Framework)) - { - msbuildArgs.Add($"/p:TargetFramework={Framework}"); - } - - if (!string.IsNullOrEmpty(Runtime)) - { - msbuildArgs.Add($"/p:RuntimeIdentifier={Runtime}"); - } - - if (!string.IsNullOrEmpty(OutputPath)) - { - msbuildArgs.Add($"/p:PublishDir={OutputPath}"); - } - - if (!string.IsNullOrEmpty(Configuration)) - { - msbuildArgs.Add($"/p:Configuration={Configuration}"); - } - - if (!string.IsNullOrEmpty(VersionSuffix)) - { - msbuildArgs.Add($"/p:VersionSuffix={VersionSuffix}"); - } - - if (!string.IsNullOrEmpty(FilterProject)) - { - msbuildArgs.Add($"/p:FilterProjFile={FilterProject}"); - } - - if (!string.IsNullOrEmpty(Verbosity)) - { - msbuildArgs.Add($"/verbosity:{Verbosity}"); - } - - msbuildArgs.AddRange(ExtraMSBuildArguments); - - return new MSBuildForwardingApp(msbuildArgs, msbuildPath); - } - } -} diff --git a/src/dotnet/commands/dotnet-vstest/VSTestForwardingApp.cs b/src/dotnet/commands/dotnet-vstest/VSTestForwardingApp.cs index 0359fb478..8c91b1bfc 100644 --- a/src/dotnet/commands/dotnet-vstest/VSTestForwardingApp.cs +++ b/src/dotnet/commands/dotnet-vstest/VSTestForwardingApp.cs @@ -9,29 +9,16 @@ using System.IO; namespace Microsoft.DotNet.Cli { - public class VSTestForwardingApp + public class VSTestForwardingApp : ForwardingApp { private const string VstestAppName = "vstest.console.dll"; - private readonly ForwardingApp _forwardingApp; public VSTestForwardingApp(IEnumerable argsToForward) + : base(GetVSTestExePath(), argsToForward) { - _forwardingApp = new ForwardingApp( - GetVSTestExePath(), - argsToForward); } - public ProcessStartInfo GetProcessStartInfo() - { - return _forwardingApp.GetProcessStartInfo(); - } - - public int Execute() - { - return GetProcessStartInfo().Execute(); - } - - private string GetVSTestExePath() + private static string GetVSTestExePath() { return Path.Combine(AppContext.BaseDirectory, VstestAppName); }