Browse Source

closes #3811

pull/3721/head^2
Alper Ebicoglu 6 years ago
parent
commit
d8591bdaa6
  1. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs
  2. 62
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
  3. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs

@ -20,7 +20,7 @@ namespace Volo.Abp.Cli.ProjectModification
Logger = NullLogger<MyGetPackageListFinder>.Instance; Logger = NullLogger<MyGetPackageListFinder>.Instance;
} }
public async Task<MyGetApiResponse> GetPackages() public async Task<MyGetApiResponse> GetPackagesAsync()
{ {
if (_response != null) if (_response != null)
{ {

62
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs

@ -13,25 +13,31 @@ using Volo.Abp.Cli.Http;
using Volo.Abp.Cli.Utils; using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.IO; using Volo.Abp.IO;
using Volo.Abp.Threading;
namespace Volo.Abp.Cli.ProjectModification namespace Volo.Abp.Cli.ProjectModification
{ {
public class NpmPackagesUpdater : ITransientDependency public class NpmPackagesUpdater : ITransientDependency
{ {
public ILogger<NpmPackagesUpdater> Logger { get; set; } public ILogger<NpmPackagesUpdater> Logger { get; set; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
private readonly PackageJsonFileFinder _packageJsonFileFinder; private readonly PackageJsonFileFinder _packageJsonFileFinder;
private readonly NpmGlobalPackagesChecker _npmGlobalPackagesChecker; private readonly NpmGlobalPackagesChecker _npmGlobalPackagesChecker;
private readonly MyGetPackageListFinder _myGetPackageListFinder; private readonly MyGetPackageListFinder _myGetPackageListFinder;
private readonly Dictionary<string, string> _fileVersionStorage = new Dictionary<string, string>(); private readonly Dictionary<string, string> _fileVersionStorage = new Dictionary<string, string>();
private MyGetApiResponse _myGetApiResponse;
public NpmPackagesUpdater(PackageJsonFileFinder packageJsonFileFinder, NpmGlobalPackagesChecker npmGlobalPackagesChecker, MyGetPackageListFinder myGetPackageListFinder) public NpmPackagesUpdater(
PackageJsonFileFinder packageJsonFileFinder,
NpmGlobalPackagesChecker npmGlobalPackagesChecker,
MyGetPackageListFinder myGetPackageListFinder,
ICancellationTokenProvider cancellationTokenProvider)
{ {
_packageJsonFileFinder = packageJsonFileFinder; _packageJsonFileFinder = packageJsonFileFinder;
_npmGlobalPackagesChecker = npmGlobalPackagesChecker; _npmGlobalPackagesChecker = npmGlobalPackagesChecker;
_myGetPackageListFinder = myGetPackageListFinder; _myGetPackageListFinder = myGetPackageListFinder;
CancellationTokenProvider = cancellationTokenProvider;
Logger = NullLogger<NpmPackagesUpdater>.Instance; Logger = NullLogger<NpmPackagesUpdater>.Instance;
} }
@ -77,7 +83,7 @@ namespace Volo.Abp.Cli.ProjectModification
} }
} }
private async Task DeleteNpmrcFileAsync(string directoryName) private static async Task DeleteNpmrcFileAsync(string directoryName)
{ {
FileHelper.DeleteIfExists(Path.Combine(directoryName, ".npmrc")); FileHelper.DeleteIfExists(Path.Combine(directoryName, ".npmrc"));
@ -135,11 +141,13 @@ namespace Volo.Abp.Cli.ProjectModification
{ {
using (var client = new CliHttpClient(TimeSpan.FromMinutes(1))) using (var client = new CliHttpClient(TimeSpan.FromMinutes(1)))
{ {
var responseMessage = await client.GetAsync( var response = await client.GetHttpResponseMessageWithRetryAsync(
$"{CliUrls.WwwAbpIo}api/myget/apikey/" url: $"{CliUrls.WwwAbpIo}api/myget/apikey/",
cancellationToken: CancellationTokenProvider.Token,
logger: Logger
); );
return Encoding.Default.GetString(await responseMessage.Content.ReadAsByteArrayAsync()); return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync());
} }
} }
catch (Exception) catch (Exception)
@ -148,26 +156,26 @@ namespace Volo.Abp.Cli.ProjectModification
} }
} }
private bool IsAngularProject(string fileDirectory) private static bool IsAngularProject(string fileDirectory)
{ {
return File.Exists(Path.Combine(fileDirectory, "angular.json")); return File.Exists(Path.Combine(fileDirectory, "angular.json"));
} }
protected virtual async Task<bool> UpdatePackagesInFile(string file, bool includePreviews = false, bool switchToStable = false) protected virtual async Task<bool> UpdatePackagesInFile(string filePath, bool includePreviews = false, bool switchToStable = false)
{ {
var packagesUpdated = false; var packagesUpdated = false;
var fileContent = File.ReadAllText(file); var fileContent = File.ReadAllText(filePath);
var packageJson = JObject.Parse(fileContent); var packageJson = JObject.Parse(fileContent);
var abpPackages = GetAbpPackagesFromPackageJson(packageJson); var abpPackages = GetAbpPackagesFromPackageJson(packageJson);
if (!abpPackages.Any()) if (!abpPackages.Any())
{ {
return packagesUpdated; return false;
} }
foreach (var abpPackage in abpPackages) foreach (var abpPackage in abpPackages)
{ {
var updated = await TryUpdatePackage(file, abpPackage, includePreviews, switchToStable); var updated = await TryUpdatingPackage(filePath, abpPackage, includePreviews, switchToStable);
if (updated) if (updated)
{ {
@ -175,15 +183,18 @@ namespace Volo.Abp.Cli.ProjectModification
} }
} }
var modifiedFileContent = packageJson.ToString(Formatting.Indented); var updatedContent = packageJson.ToString(Formatting.Indented);
File.WriteAllText(file, modifiedFileContent); File.WriteAllText(filePath, updatedContent);
return packagesUpdated; return packagesUpdated;
} }
protected virtual async Task<bool> TryUpdatePackage(string file, JProperty package, protected virtual async Task<bool> TryUpdatingPackage(
bool includePreviews = false, bool switchToStable = false) string filePath,
JProperty package,
bool includePreviews = false,
bool switchToStable = false)
{ {
var currentVersion = (string)package.Value; var currentVersion = (string)package.Value;
@ -198,23 +209,31 @@ namespace Volo.Abp.Cli.ProjectModification
package.Value.Replace(versionWithPrefix); package.Value.Replace(versionWithPrefix);
Logger.LogInformation($"Updated {package.Name} to {version} in {file.Replace(Directory.GetCurrentDirectory(), "")}."); Logger.LogInformation($"Updated {package.Name} to {version} in {filePath.Replace(Directory.GetCurrentDirectory(), "")}.");
return true; return true;
} }
protected virtual async Task<string> GetLatestVersion(JProperty package, string currentVersion, protected virtual async Task<string> GetLatestVersion(
bool includePreviews = false, bool switchToStable = false) JProperty package,
string currentVersion,
bool includePreviews = false,
bool switchToStable = false)
{ {
if (_fileVersionStorage.ContainsKey(package.Name)) if (_fileVersionStorage.ContainsKey(package.Name))
{ {
return _fileVersionStorage[package.Name]; return _fileVersionStorage[package.Name];
} }
string newVersion = currentVersion; var newVersion = currentVersion;
if (includePreviews || (!switchToStable && currentVersion.Contains("-preview"))) if (includePreviews || (!switchToStable && currentVersion.Contains("-preview")))
{ {
var mygetPackage = (await _myGetPackageListFinder.GetPackages()).Packages.FirstOrDefault(p => p.Id == package.Name); if (_myGetApiResponse == null)
{
_myGetApiResponse = await _myGetPackageListFinder.GetPackagesAsync();
}
var mygetPackage = _myGetApiResponse.Packages.FirstOrDefault(p => p.Id == package.Name);
if (mygetPackage != null) if (mygetPackage != null)
{ {
newVersion = mygetPackage.Versions.Last(); newVersion = mygetPackage.Versions.Last();
@ -225,7 +244,6 @@ namespace Volo.Abp.Cli.ProjectModification
newVersion = CmdHelper.RunCmdAndGetOutput($"npm show {package.Name} version"); newVersion = CmdHelper.RunCmdAndGetOutput($"npm show {package.Name} version");
} }
_fileVersionStorage[package.Name] = newVersion; _fileVersionStorage[package.Name] = newVersion;
return newVersion; return newVersion;

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

@ -123,7 +123,7 @@ namespace Volo.Abp.Cli.ProjectModification
private async Task<string> GetLatestVersionFromMyGet(string packageId) private async Task<string> GetLatestVersionFromMyGet(string packageId)
{ {
var myGetPack = await _myGetPackageListFinder.GetPackages(); var myGetPack = await _myGetPackageListFinder.GetPackagesAsync();
return myGetPack.Packages.FirstOrDefault(p => p.Id == packageId)?.Versions.LastOrDefault(); return myGetPack.Packages.FirstOrDefault(p => p.Id == packageId)?.Versions.LastOrDefault();
} }

Loading…
Cancel
Save