From 23f612fe468209c381dd14acc678f28263eb7829 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 19 Apr 2021 13:14:39 +0300 Subject: [PATCH 1/6] cli docs: add oracle option --- docs/en/CLI.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index ebf27952b3..2dda0b6ae5 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -113,6 +113,7 @@ For more samples, go to [ABP CLI Create Solution Samples](CLI-New-Command-Sample * `SqlServer` * `MySQL` * `SQLite` + * `Oracle` * `Oracle-Devart` * `PostgreSQL` * `--local-framework-ref --abp-path`: Uses local projects references to the ABP framework instead of using the NuGet packages. This can be useful if you download the ABP Framework source code and have a local reference to the framework from your application. From bc95e9e58950d83930ff48687b00f000e46ce4c7 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 19 Apr 2021 13:20:46 +0300 Subject: [PATCH 2/6] Cli: Configure cms-kit option for stable version resolves https://github.com/abpframework/abp/issues/8394 --- .../Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs index 52a06f7117..bd79006b9f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs @@ -210,10 +210,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App { if (string.IsNullOrWhiteSpace(context.BuildArgs.Version)) { - // We'll return true after 4.3.0 stable release. see https://github.com/abpframework/abp/issues/8394 - // return true; - - return context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.Preview.Long); + return true; } return SemanticVersion.Parse(context.BuildArgs.Version) > SemanticVersion.Parse("4.2.9"); From a5c3a8e58a267d806fd5365d3b9f40e41473e5c8 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 19 Apr 2021 15:22:27 +0300 Subject: [PATCH 3/6] Cli add-module: be sure keep projects that are referenced by other module projects --- .../SolutionModuleAdder.cs | 75 ++++++++++++------- 1 file changed, 50 insertions(+), 25 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 3b5e695203..95768a3d52 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -186,6 +186,7 @@ namespace Volo.Abp.Cli.ProjectModification private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module, string[] projectFiles) { + var projectsToRemove = new List(); var moduleDirectory = Path.Combine(solutionDirectory, "modules", module.Name); var moduleSolutionFile = Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First(); var isProjectTiered = await IsProjectTiered(projectFiles); @@ -194,10 +195,10 @@ namespace Volo.Abp.Cli.ProjectModification var blazorProject = projectFiles.FirstOrDefault(p => p.EndsWith(".Blazor.csproj")); if (blazorProject == null) { - await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Blazor, isProjectTiered); - await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.BlazorServer, isProjectTiered); - await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.BlazorWebAssembly, isProjectTiered); - await RemoveProjectByPostFix(module, moduleSolutionFile, "src", ".Blazor"); + projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.Blazor, isProjectTiered)); + projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.BlazorServer, isProjectTiered)); + projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.BlazorWebAssembly, isProjectTiered)); + projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "src", ".Blazor")); } else { @@ -205,39 +206,58 @@ namespace Volo.Abp.Cli.ProjectModification if (isBlazorServer) { - await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.BlazorWebAssembly, isProjectTiered); + projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.BlazorWebAssembly, isProjectTiered)); webPackagesWillBeAddedToBlazorServerProject = module.NugetPackages.All(np=> np.Target != NuGetPackageTarget.BlazorServer && np.TieredTarget != NuGetPackageTarget.BlazorServer); } else { - await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.BlazorServer, isProjectTiered); + projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.BlazorServer, isProjectTiered)); } } if (!projectFiles.Any(p => p.EndsWith(".Web.csproj")) && !webPackagesWillBeAddedToBlazorServerProject) { - await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Web, isProjectTiered); + projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.Web, isProjectTiered)); } if (!projectFiles.Any(p => p.EndsWith(".MongoDB.csproj"))) { - await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.MongoDB, isProjectTiered); - await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".MongoDB.Tests"); + projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.MongoDB, isProjectTiered)); + projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "test", ".MongoDB.Tests")); } if (!projectFiles.Any(p => p.EndsWith(".EntityFrameworkCore.csproj"))) { - await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered); - await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".EntityFrameworkCore.Tests"); - await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".Application.Tests"); + projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered)); + projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "test", ".EntityFrameworkCore.Tests")); + projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "test", ".Application.Tests")); ChangeDomainTestReferenceToMongoDB(module, moduleSolutionFile); } + + foreach (var projectToRemove in projectsToRemove) + { + if (IsReferencedByAnotherModuleProject(moduleDirectory, projectsToRemove, projectToRemove)) + { + continue; + } + + RemoveProjectFromSolutionAsync(moduleSolutionFile, projectToRemove); + } } - private async Task RemoveProjectByTarget(ModuleWithMastersInfo module, string moduleSolutionFile, + private bool IsReferencedByAnotherModuleProject(string moduleDirectory, List projectsToRemove, string projectToRemove) + { + var moduleProjects = Directory.GetFiles(moduleDirectory, "*.csproj", SearchOption.AllDirectories); + var projectsToKeep = moduleProjects.Where(mp=> !projectsToRemove.Contains(Path.GetFileName(mp).RemovePostFix(".csproj"))).ToList(); + return projectsToKeep.Select(File.ReadAllText).Any(content => content.Contains($"\"{projectToRemove}\"")); + } + + private async Task> FindProjectsToRemoveByTarget(ModuleWithMastersInfo module, NuGetPackageTarget target, bool isTieredProject) { + var projectsToRemove = new List(); + var packages = module.NugetPackages.Where(n => (isTieredProject && n.TieredTarget != NuGetPackageTarget.Undefined ? n.TieredTarget @@ -251,37 +271,42 @@ namespace Volo.Abp.Cli.ProjectModification continue; } - await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, package.Name); - - var projectPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "src", package.Name); - if (Directory.Exists(projectPath)) - { - Directory.Delete(projectPath, true); - } + projectsToRemove.Add(package.Name); } + + return projectsToRemove; } - private async Task RemoveProjectByPostFix(ModuleWithMastersInfo module, string moduleSolutionFile, string targetFolder, + private async Task> FindProjectsToRemoveByPostFix(string moduleDirectory, string targetFolder, string postFix) { - var srcPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), targetFolder); + var projectsToRemove = new List(); + var srcPath = Path.Combine(moduleDirectory, targetFolder); if (!Directory.Exists(srcPath)) { - return; + return projectsToRemove; } var projectFolderPaths = Directory.GetDirectories(srcPath).Where(d => d.EndsWith(postFix)).ToList(); foreach (var projectFolderPath in projectFolderPaths) { - await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, new DirectoryInfo(projectFolderPath).Name); + projectsToRemove.Add(new DirectoryInfo(projectFolderPath).Name); + } + return projectsToRemove; + } + + private async Task RemoveProjectFromSolutionAsync(string moduleSolutionFile, string projectName) + { + await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, projectName); + + var projectFolderPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "src", projectName); if (Directory.Exists(projectFolderPath)) { Directory.Delete(projectFolderPath, true); } - } } private void ChangeDomainTestReferenceToMongoDB(ModuleWithMastersInfo module, string moduleSolutionFile) From 9380051e60206d33851bac9ae6ff248f04957ca8 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 19 Apr 2021 15:34:23 +0300 Subject: [PATCH 4/6] Cli: Fix AppTemplateSwitchEntityFrameworkCoreToMongoDbStep bug for older projects --- ...eSwitchEntityFrameworkCoreToMongoDbStep.cs | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs index 8f56902ab7..309d0a1552 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs @@ -227,7 +227,12 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App string oldReference, string newReference) { - var file = context.GetFile(targetProjectFilePath); + var file = context.FindFile(targetProjectFilePath); + + if (file == null) + { + return; + } file.NormalizeLineEndings(); @@ -253,7 +258,12 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App string oldKeyword, string newKeyword) { - var file = context.GetFile(targetModuleFilePath); + var file = context.FindFile(targetModuleFilePath); + + if (file == null) + { + return; + } file.NormalizeLineEndings(); @@ -278,7 +288,12 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App ProjectBuildContext context, string appsettingFilePath) { - var file = context.GetFile(appsettingFilePath); + var file = context.FindFile(appsettingFilePath); + + if (file == null) + { + return; + } file.NormalizeLineEndings(); From a5897c03f866fa28c8ec87e2ea14542d2c3844a6 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 19 Apr 2021 16:53:53 +0300 Subject: [PATCH 5/6] Cli add-module: fix angular source code project finder --- .../Services/SourceCodeDownloadService.cs | 25 +------------------ .../AngularSourceCodeAdder.cs | 6 +++++ 2 files changed, 7 insertions(+), 24 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Services/SourceCodeDownloadService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Services/SourceCodeDownloadService.cs index 088cadb707..56e5c0a03b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Services/SourceCodeDownloadService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Services/SourceCodeDownloadService.cs @@ -203,30 +203,7 @@ namespace Volo.Abp.Cli.Commands.Services return false; } - if (zipEntryName.Contains(Path.Combine("angular/e2e"))) - { - return true; - } - if (zipEntryName.Contains(Path.Combine("angular/src"))) - { - return true; - } - if (zipEntryName.Contains(Path.Combine("angular/node_modules"))) - { - return true; - } - if (zipEntryName.Contains(Path.Combine("angular/scripts"))) - { - return true; - } - if (zipEntryName.Contains(Path.Combine("angular/source-code-requirements"))) - { - return true; - } - - var fileName = Path.GetFileName(zipEntryName); - - if (!string.IsNullOrEmpty(fileName) && zipEntryName.Equals("angular/" + fileName)) + if (zipEntryName.StartsWith("angular/") && !zipEntryName.StartsWith("angular/projects")) { return true; } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs index 9d95f818d1..93626d682d 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs @@ -246,6 +246,12 @@ namespace Volo.Abp.Cli.ProjectModification var foldersUnderProject = Directory.GetDirectories(Path.Combine(folder, "projects")); foreach (var folderUnderProject in foldersUnderProject) { + if (Path.GetFileName(folderUnderProject) == "dev-app") + { + Directory.Delete(folderUnderProject, true); + continue; + } + if (Directory.Exists(Path.Combine(folder, Path.GetFileName(folderUnderProject)))) { continue; From 7090d1ad41e023374e7fa297d1e363b80bfc2ff9 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 19 Apr 2021 21:16:27 +0300 Subject: [PATCH 6/6] cli: Added min-max version for NpmPackageInfo --- .../Abp/Cli/ProjectModification/NpmPackageInfo.cs | 6 +++++- .../Cli/ProjectModification/SolutionModuleAdder.cs | 13 +++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackageInfo.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackageInfo.cs index 47f0f1092d..dc86a720cf 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackageInfo.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackageInfo.cs @@ -5,5 +5,9 @@ public string Name { get; set; } public NpmApplicationType ApplicationType { get; set; } + + public string MinVersion { get; set; } + + public string MaxVersion { get; set; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 3b5e695203..eddb4b7d87 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -135,24 +135,25 @@ namespace Volo.Abp.Cli.ProjectModification private ModuleWithMastersInfo RemoveIncompatiblePackages(ModuleWithMastersInfo module, string version) { - module.NugetPackages.RemoveAll(np => IsPackageInCompatible(np, version)); + module.NugetPackages.RemoveAll(np => IsPackageInCompatible(np.MinVersion, np.MaxVersion, version)); + module.NpmPackages.RemoveAll(np => IsPackageInCompatible(np.MinVersion, np.MaxVersion, version)); return module; } - private bool IsPackageInCompatible(NugetPackageInfo package, string version) + private bool IsPackageInCompatible(string minVersion, string maxVersion, string version) { try { - if (!string.IsNullOrWhiteSpace(package.MinVersion)) + if (!string.IsNullOrWhiteSpace(minVersion)) { - if (SemanticVersion.Parse(package.MinVersion) > SemanticVersion.Parse(version)) + if (SemanticVersion.Parse(minVersion) > SemanticVersion.Parse(version)) { return true; } } - if (!string.IsNullOrWhiteSpace(package.MaxVersion)) + if (!string.IsNullOrWhiteSpace(maxVersion)) { - if (SemanticVersion.Parse(package.MaxVersion) < SemanticVersion.Parse(version)) + if (SemanticVersion.Parse(maxVersion) < SemanticVersion.Parse(version)) { return true; }