From 3bb802da6b7cc36b78c61f625ce6090fc8223555 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Sun, 17 Nov 2019 16:02:26 +0300 Subject: [PATCH 1/2] Adding cli namespace normalizer. Reference: https://stackoverflow.com/questions/773557/which-characters-are-allowed-in-a-vs-project-name Reference: https://github.com/dotnet/templating/blob/dcf5adbd4b5665887f22ad19592dedfb9f1e1b68/src/Microsoft.TemplateEngine.Orchestrator.RunnableProjects/ValueForms/DefaultSafeNamespaceValueFormModel.cs#L35 --- .../Abp/Cli/Args/CommandLineArgumentParser.cs | 2 ++ .../Volo/Abp/Cli/Utils/NamespaceHelper.cs | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NamespaceHelper.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs index 1dd29e5df7..52ddfafae5 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Cli.Args @@ -40,6 +41,7 @@ namespace Volo.Abp.Cli.Args if (!argumentList.Any()) { + target = NamespaceHelper.NormalizeNamespace(target); return new CommandLineArgs(command, target); } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NamespaceHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NamespaceHelper.cs new file mode 100644 index 0000000000..9001cd51e3 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NamespaceHelper.cs @@ -0,0 +1,21 @@ +using System.Text.RegularExpressions; +using JetBrains.Annotations; + +namespace Volo.Abp.Cli.Utils +{ + public static class NamespaceHelper + { + public static string NormalizeNamespace([CanBeNull] string value) + { + if (string.IsNullOrEmpty(value)) + { + return value; + } + + value = Regex.Replace(value, @"(^\s+|\s+$)", ""); + value = Regex.Replace(value, @"(((?<=\.)|^)((?=\d)|\.)|[^\w\.])|(\.$)", "_"); + + return value; + } + } +} \ No newline at end of file From b2a47cfc463e434f7e57533b8a97d9f0c605fd6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Mon, 18 Nov 2019 10:04:46 +0300 Subject: [PATCH 2/2] change review request. --- .../Abp/Cli/Args/CommandLineArgumentParser.cs | 2 -- .../Volo/Abp/Cli/Commands/NewCommand.cs | 15 +++++++++------ .../Volo/Abp/Cli/Utils/NamespaceHelper.cs | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs index 52ddfafae5..1dd29e5df7 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Cli.Args @@ -41,7 +40,6 @@ namespace Volo.Abp.Cli.Args if (!argumentList.Any()) { - target = NamespaceHelper.NormalizeNamespace(target); return new CommandLineArgs(command, target); } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 4d4f6f797e..44c1789907 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -9,6 +9,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.ProjectBuilding.Building; +using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Cli.Commands @@ -28,7 +29,9 @@ namespace Volo.Abp.Cli.Commands public async Task ExecuteAsync(CommandLineArgs commandLineArgs) { - if (commandLineArgs.Target == null) + var projectName = NamespaceHelper.NormalizeNamespace(commandLineArgs.Target); + + if (projectName == null) { throw new CliUsageException( "Project name is missing!" + @@ -36,9 +39,9 @@ namespace Volo.Abp.Cli.Commands GetUsageInfo() ); } - + Logger.LogInformation("Creating your project..."); - Logger.LogInformation("Project name: " + commandLineArgs.Target); + Logger.LogInformation("Project name: " + projectName); var template = commandLineArgs.Options.GetOrNull(Options.Template.Short, Options.Template.Long); if (template != null) @@ -73,7 +76,7 @@ namespace Volo.Abp.Cli.Commands var outputFolder = commandLineArgs.Options.GetOrNull(Options.OutputFolder.Short, Options.OutputFolder.Long); outputFolder = Path.Combine(outputFolder != null ? Path.GetFullPath(outputFolder) : Directory.GetCurrentDirectory(), - SolutionName.Parse(commandLineArgs.Target).FullName); + SolutionName.Parse(projectName).FullName); if (!Directory.Exists(outputFolder)) { @@ -86,7 +89,7 @@ namespace Volo.Abp.Cli.Commands var result = await TemplateProjectBuilder.BuildAsync( new ProjectBuildArgs( - SolutionName.Parse(commandLineArgs.Target), + SolutionName.Parse(projectName), template, version, databaseProvider, @@ -129,7 +132,7 @@ namespace Volo.Abp.Cli.Commands } } - Logger.LogInformation($"'{commandLineArgs.Target}' has been successfully created to '{outputFolder}'"); + Logger.LogInformation($"'{projectName}' has been successfully created to '{outputFolder}'"); } public string GetUsageInfo() diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NamespaceHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NamespaceHelper.cs index 9001cd51e3..80e893afcf 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NamespaceHelper.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NamespaceHelper.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.Cli.Utils return value; } - value = Regex.Replace(value, @"(^\s+|\s+$)", ""); + value = value.Trim(); value = Regex.Replace(value, @"(((?<=\.)|^)((?=\d)|\.)|[^\w\.])|(\.$)", "_"); return value;