Browse Source

Merge pull request #8720 from abpframework/auto-merge/rel-4-3/336

Merge branch dev with rel-4.3
pull/8738/head
maliming 6 years ago
committed by GitHub
parent
commit
32229c819d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      docs/en/CLI.md
  2. 25
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Services/SourceCodeDownloadService.cs
  3. 5
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
  4. 21
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs
  5. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs
  6. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackageInfo.cs
  7. 88
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs

1
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.

25
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;
}

5
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");

21
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();

6
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;

6
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; }
}
}
}

88
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;
}
@ -186,6 +187,7 @@ namespace Volo.Abp.Cli.ProjectModification
private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module,
string[] projectFiles)
{
var projectsToRemove = new List<string>();
var moduleDirectory = Path.Combine(solutionDirectory, "modules", module.Name);
var moduleSolutionFile = Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First();
var isProjectTiered = await IsProjectTiered(projectFiles);
@ -194,10 +196,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 +207,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<string> 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<List<string>> FindProjectsToRemoveByTarget(ModuleWithMastersInfo module,
NuGetPackageTarget target, bool isTieredProject)
{
var projectsToRemove = new List<string>();
var packages = module.NugetPackages.Where(n =>
(isTieredProject && n.TieredTarget != NuGetPackageTarget.Undefined
? n.TieredTarget
@ -251,37 +272,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<List<string>> FindProjectsToRemoveByPostFix(string moduleDirectory, string targetFolder,
string postFix)
{
var srcPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), targetFolder);
var projectsToRemove = new List<string>();
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)

Loading…
Cancel
Save