Browse Source

Refactor VoloNugetPackagesVersionUpdater

pull/1350/head
Xeevis 7 years ago
parent
commit
b27e524316
  1. 59
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs

59
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs

@ -1,6 +1,6 @@
using System; using NuGet.Versioning;
using System.IO; using System.IO;
using System.Text; using System.Xml;
using Volo.Abp.Cli.NuGet; using Volo.Abp.Cli.NuGet;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Threading; using Volo.Abp.Threading;
@ -35,54 +35,29 @@ namespace Volo.Abp.Cli.ProjectModification
{ {
var fileContent = File.ReadAllText(projectPath); var fileContent = File.ReadAllText(projectPath);
var content = new StringBuilder(); File.WriteAllText(projectPath, UpdateVoloPackages(fileContent, includePreviews));
var index = 0;
while (index >= 0)
{
fileContent = fileContent.Substring(index);
content.Append(ReplaceAPackage(fileContent, includePreviews, out index));
}
File.WriteAllText(projectPath, content.ToString());
} }
private string ReplaceAPackage(string content, bool includePreviews, out int index) private string UpdateVoloPackages(string content, bool includePreviews)
{ {
var packageReferenceStartText = "nclude=\"Volo."; var doc = new XmlDocument() { PreserveWhitespace = true };
var returningText = new StringBuilder(); doc.LoadXml(content);
var indexOfPackageReference = content.IndexOf(packageReferenceStartText, StringComparison.Ordinal); foreach (XmlNode package in doc.SelectNodes("/Project/ItemGroup/PackageReference[starts-with(@Include, 'Volo.')]"))
if (indexOfPackageReference < 0)
{ {
index = -1; var versionAttribute = package.Attributes["Version"];
return content;
}
returningText.Append(content.Substring(0, indexOfPackageReference + packageReferenceStartText.Length));
content = content.Substring(indexOfPackageReference + packageReferenceStartText.Length);
var indexAfterQuote = content.IndexOf("\"", StringComparison.Ordinal) + 1; var packageId = package.Attributes["Include"].Value;
var packageVersion = SemanticVersion.Parse(versionAttribute.Value);
var latestVersion = AsyncHelper.RunSync(() => _nuGetService.GetLatestVersionOrNullAsync(packageId, includePreviews));
var packageId = "Volo." + content.Substring(indexAfterQuote - 1); if (latestVersion != null && packageVersion < latestVersion)
{
returningText.Append(content.Substring(0, indexAfterQuote)); versionAttribute.Value = latestVersion.ToString();
content = content.Substring(indexAfterQuote); }
}
var indexAfterSecondQuote = content.IndexOf("\"", StringComparison.Ordinal) + 1;
returningText.Append(content.Substring(0, indexAfterSecondQuote));
content = content.Substring(indexAfterSecondQuote);
var indexOfThirdQuote = content.IndexOf("\"", StringComparison.Ordinal);
var version = AsyncHelper.RunSync(() => _nuGetService.GetLatestVersionOrNullAsync(packageId, includePreviews));
returningText.Append(version);
index = indexOfPackageReference + packageReferenceStartText.Length + indexAfterQuote + indexAfterSecondQuote + indexOfThirdQuote;
return returningText.ToString(); return doc.OuterXml;
} }
} }
} }

Loading…
Cancel
Save