"Cli add-module with source code" should handle test references

resolves https://github.com/abpframework/abp/issues/2950
pull/2867/head^2
Yunus Emre Kalkan 6 years ago
parent 4fd35da5e3
commit 47f6b12eea

@ -15,41 +15,35 @@ namespace Volo.Abp.Cli.ProjectModification
public async Task Convert(ModuleWithMastersInfo module, string solutionFile)
{
var nugetPackageList = GetNugetPackages(module);
var modulesFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "modules");
var srcFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "src");
var testFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "test");
var projectFilesUnderModules = GetProjectFilesUnder(Path.Combine(Path.GetDirectoryName(solutionFile), "modules"));
var projectFilesUnderSrc = GetProjectFilesUnder(Path.Combine(Path.GetDirectoryName(solutionFile), "src"));
var projectFilesUnderTest = GetProjectFilesUnder(Path.Combine(Path.GetDirectoryName(solutionFile), "test"));
foreach (var projectFile in projectFilesUnderModules)
{
ConvertToLocalReference(projectFile, nugetPackageList, "..\\..\\..\\");
}
foreach (var projectFile in projectFilesUnderSrc)
{
ConvertToLocalReference(projectFile, nugetPackageList, "..\\..\\modules\\");
}
foreach (var projectFile in projectFilesUnderTest)
{
ConvertToLocalReference(projectFile, nugetPackageList, "..\\..\\modules\\", "test");
}
ConvertToLocalReference(modulesFolder, nugetPackageList, "..\\..\\..\\");
ConvertToLocalReference(srcFolder, nugetPackageList, "..\\..\\modules\\");
ConvertToLocalReference(testFolder, nugetPackageList, "..\\..\\modules\\", "test");
}
private void ConvertToLocalReference(string projectFile, List<NugetPackageInfoWithModuleName> nugetPackageList, string localPathPrefix, string sourceFile = "src")
private void ConvertToLocalReference(string folder, List<NugetPackageInfoWithModuleName> nugetPackageList, string localPathPrefix, string sourceFile = "src")
{
var content = File.ReadAllText(projectFile);
var doc = new XmlDocument() { PreserveWhitespace = true };
var projectFiles = GetProjectFilesUnder(folder);
doc.Load(StreamHelper.GenerateStreamFromString(content));
foreach (var projectFile in projectFiles)
{
var content = File.ReadAllText(projectFile);
var doc = new XmlDocument() { PreserveWhitespace = true };
var convertedProject = ProcessReferenceNodes(doc, nugetPackageList, localPathPrefix, sourceFile);
doc.Load(StreamHelper.GenerateStreamFromString(content));
File.WriteAllText(projectFile, convertedProject);
}
var convertedProject = ProcessReferenceNodes(folder, doc, nugetPackageList, localPathPrefix, sourceFile);
File.WriteAllText(projectFile, convertedProject);
}
}
private string ProcessReferenceNodes(XmlDocument doc, List<NugetPackageInfoWithModuleName> nugetPackageList, string localPathPrefix, string sourceFile = "src")
private string ProcessReferenceNodes(string folder, XmlDocument doc, List<NugetPackageInfoWithModuleName> nugetPackageList, string localPathPrefix, string sourceFile = "src")
{
var nodes = doc.SelectNodes("/Project/ItemGroup/PackageReference[@Include]");
var nodes = doc.SelectNodes("/Project/ItemGroup/PackageReference[starts-with(@Include, 'Volo.Abp')]");
if (nodes == null)
{
@ -60,17 +54,36 @@ namespace Volo.Abp.Cli.ProjectModification
{
var oldNodeIncludeValue = oldNode?.Attributes?["Include"]?.Value;
var nugetPackage = nugetPackageList.FirstOrDefault(n => n.NugetPackage.Name == oldNodeIncludeValue);
var moduleName = nugetPackageList.FirstOrDefault(n => n.NugetPackage.Name == oldNodeIncludeValue)?.ModuleName;
if (nugetPackage == null)
if (moduleName == null)
{
continue;
var localProject = GetProjectFilesUnder(folder).FirstOrDefault(f=> f.EndsWith($"{oldNodeIncludeValue}.csproj"));
if (localProject != null)
{
moduleName = Directory.GetParent(Directory.GetParent(Path.GetDirectoryName(localProject)).FullName).Name;
if (oldNodeIncludeValue.EndsWith(".test", StringComparison.InvariantCultureIgnoreCase) ||
oldNodeIncludeValue.EndsWith(".tests", StringComparison.InvariantCultureIgnoreCase))
{
sourceFile = "test";
}
else
{
sourceFile = "src";
}
}
else
{
continue;
}
}
var referenceProjectPath =
$"{localPathPrefix}{nugetPackage.ModuleName}\\{sourceFile}\\{nugetPackage.NugetPackage.Name}\\{nugetPackage.NugetPackage.Name}.csproj";
$"{localPathPrefix}{moduleName}\\{sourceFile}\\{oldNodeIncludeValue}\\{oldNodeIncludeValue}.csproj";
XmlNode newNode = GetNewReferenceNode(doc, referenceProjectPath);
XmlNode newNode = GetNewReferenceNode(doc, referenceProjectPath);
oldNode?.ParentNode?.ReplaceChild(newNode, oldNode);
}

Loading…
Cancel
Save