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` * `SqlServer`
* `MySQL` * `MySQL`
* `SQLite` * `SQLite`
* `Oracle`
* `Oracle-Devart` * `Oracle-Devart`
* `PostgreSQL` * `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. * `--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; return false;
} }
if (zipEntryName.Contains(Path.Combine("angular/e2e"))) if (zipEntryName.StartsWith("angular/") && !zipEntryName.StartsWith("angular/projects"))
{
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))
{ {
return true; 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)) 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 true;
return context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.Preview.Long);
} }
return SemanticVersion.Parse(context.BuildArgs.Version) > SemanticVersion.Parse("4.2.9"); 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 oldReference,
string newReference) string newReference)
{ {
var file = context.GetFile(targetProjectFilePath); var file = context.FindFile(targetProjectFilePath);
if (file == null)
{
return;
}
file.NormalizeLineEndings(); file.NormalizeLineEndings();
@ -253,7 +258,12 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
string oldKeyword, string oldKeyword,
string newKeyword) string newKeyword)
{ {
var file = context.GetFile(targetModuleFilePath); var file = context.FindFile(targetModuleFilePath);
if (file == null)
{
return;
}
file.NormalizeLineEndings(); file.NormalizeLineEndings();
@ -278,7 +288,12 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
ProjectBuildContext context, ProjectBuildContext context,
string appsettingFilePath) string appsettingFilePath)
{ {
var file = context.GetFile(appsettingFilePath); var file = context.FindFile(appsettingFilePath);
if (file == null)
{
return;
}
file.NormalizeLineEndings(); 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")); var foldersUnderProject = Directory.GetDirectories(Path.Combine(folder, "projects"));
foreach (var folderUnderProject in foldersUnderProject) 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)))) if (Directory.Exists(Path.Combine(folder, Path.GetFileName(folderUnderProject))))
{ {
continue; continue;

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackageInfo.cs

@ -5,5 +5,9 @@
public string Name { get; set; } public string Name { get; set; }
public NpmApplicationType ApplicationType { 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) 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; return module;
} }
private bool IsPackageInCompatible(NugetPackageInfo package, string version) private bool IsPackageInCompatible(string minVersion, string maxVersion, string version)
{ {
try 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; 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; return true;
} }
@ -186,6 +187,7 @@ namespace Volo.Abp.Cli.ProjectModification
private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module, private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module,
string[] projectFiles) string[] projectFiles)
{ {
var projectsToRemove = new List<string>();
var moduleDirectory = Path.Combine(solutionDirectory, "modules", module.Name); var moduleDirectory = Path.Combine(solutionDirectory, "modules", module.Name);
var moduleSolutionFile = Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First(); var moduleSolutionFile = Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First();
var isProjectTiered = await IsProjectTiered(projectFiles); var isProjectTiered = await IsProjectTiered(projectFiles);
@ -194,10 +196,10 @@ namespace Volo.Abp.Cli.ProjectModification
var blazorProject = projectFiles.FirstOrDefault(p => p.EndsWith(".Blazor.csproj")); var blazorProject = projectFiles.FirstOrDefault(p => p.EndsWith(".Blazor.csproj"));
if (blazorProject == null) if (blazorProject == null)
{ {
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Blazor, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.Blazor, isProjectTiered));
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.BlazorServer, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.BlazorServer, isProjectTiered));
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.BlazorWebAssembly, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.BlazorWebAssembly, isProjectTiered));
await RemoveProjectByPostFix(module, moduleSolutionFile, "src", ".Blazor"); projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "src", ".Blazor"));
} }
else else
{ {
@ -205,39 +207,58 @@ namespace Volo.Abp.Cli.ProjectModification
if (isBlazorServer) 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); webPackagesWillBeAddedToBlazorServerProject = module.NugetPackages.All(np=> np.Target != NuGetPackageTarget.BlazorServer && np.TieredTarget != NuGetPackageTarget.BlazorServer);
} }
else 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) 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"))) if (!projectFiles.Any(p => p.EndsWith(".MongoDB.csproj")))
{ {
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.MongoDB, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.MongoDB, isProjectTiered));
await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".MongoDB.Tests"); projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "test", ".MongoDB.Tests"));
} }
if (!projectFiles.Any(p => p.EndsWith(".EntityFrameworkCore.csproj"))) if (!projectFiles.Any(p => p.EndsWith(".EntityFrameworkCore.csproj")))
{ {
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered));
await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".EntityFrameworkCore.Tests"); projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "test", ".EntityFrameworkCore.Tests"));
await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".Application.Tests"); projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "test", ".Application.Tests"));
ChangeDomainTestReferenceToMongoDB(module, moduleSolutionFile); 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) NuGetPackageTarget target, bool isTieredProject)
{ {
var projectsToRemove = new List<string>();
var packages = module.NugetPackages.Where(n => var packages = module.NugetPackages.Where(n =>
(isTieredProject && n.TieredTarget != NuGetPackageTarget.Undefined (isTieredProject && n.TieredTarget != NuGetPackageTarget.Undefined
? n.TieredTarget ? n.TieredTarget
@ -251,37 +272,42 @@ namespace Volo.Abp.Cli.ProjectModification
continue; continue;
} }
await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, package.Name); projectsToRemove.Add(package.Name);
var projectPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "src", package.Name);
if (Directory.Exists(projectPath))
{
Directory.Delete(projectPath, true);
}
} }
return projectsToRemove;
} }
private async Task RemoveProjectByPostFix(ModuleWithMastersInfo module, string moduleSolutionFile, string targetFolder, private async Task<List<string>> FindProjectsToRemoveByPostFix(string moduleDirectory, string targetFolder,
string postFix) 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)) if (!Directory.Exists(srcPath))
{ {
return; return projectsToRemove;
} }
var projectFolderPaths = Directory.GetDirectories(srcPath).Where(d => d.EndsWith(postFix)).ToList(); var projectFolderPaths = Directory.GetDirectories(srcPath).Where(d => d.EndsWith(postFix)).ToList();
foreach (var projectFolderPath in projectFolderPaths) 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)) if (Directory.Exists(projectFolderPath))
{ {
Directory.Delete(projectFolderPath, true); Directory.Delete(projectFolderPath, true);
} }
}
} }
private void ChangeDomainTestReferenceToMongoDB(ModuleWithMastersInfo module, string moduleSolutionFile) private void ChangeDomainTestReferenceToMongoDB(ModuleWithMastersInfo module, string moduleSolutionFile)

Loading…
Cancel
Save