From c5b8f6ff2a7973fb874716678a297a5926e0ab24 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 25 Mar 2021 15:57:22 +0300 Subject: [PATCH] Cli add-module: remove incompatible packages --- .../ProjectModification/NuGetPackageInfo.cs | 6 +++- .../SolutionModuleAdder.cs | 35 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageInfo.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageInfo.cs index 6bd6297384..a3905b2006 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageInfo.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageInfo.cs @@ -9,5 +9,9 @@ public NuGetPackageTarget Target { get; set; } public NuGetPackageTarget TieredTarget { 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 caf47e0a87..d19587d198 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 @@ -7,6 +7,7 @@ using System.IO; using System.Linq; using System.Net; using System.Threading.Tasks; +using NuGet.Versioning; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Commands.Services; @@ -91,6 +92,7 @@ namespace Volo.Abp.Cli.ProjectModification Check.NotNull(moduleName, nameof(moduleName)); var module = await GetModuleInfoAsync(moduleName, newTemplate, newProTemplate); + module = RemoveIncompatiblePackages(module, version); Logger.LogInformation( $"Installing module '{module.Name}' to the solution '{Path.GetFileNameWithoutExtension(solutionFile)}'"); @@ -131,6 +133,39 @@ namespace Volo.Abp.Cli.ProjectModification ModifyDbContext(projectFiles, module, skipDbMigrations); } + private ModuleWithMastersInfo RemoveIncompatiblePackages(ModuleWithMastersInfo module, string version) + { + module.NugetPackages.RemoveAll(np => IsPackageInCompatible(np, version)); + return module; + } + + private bool IsPackageInCompatible(NugetPackageInfo package, string version) + { + try + { + if (!string.IsNullOrWhiteSpace(package.MinVersion)) + { + if (SemanticVersion.Parse(package.MinVersion) > SemanticVersion.Parse(version)) + { + return true; + } + } + if (!string.IsNullOrWhiteSpace(package.MaxVersion)) + { + if (SemanticVersion.Parse(package.MaxVersion) < SemanticVersion.Parse(version)) + { + return true; + } + } + + return false; + } + catch (ArgumentException) + { + return false; + } + } + private async Task RunBundleForBlazorAsync(string[] projectFiles, ModuleWithMastersInfo module) { var blazorProject = projectFiles.FirstOrDefault(f => f.EndsWith(".Blazor.csproj"));