From da9d863c41765757ad8a37e0feab12a13b44b75a Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Tue, 8 Dec 2020 14:07:29 +0300 Subject: [PATCH] revert back --- .../ProjectModification/NpmPackagesUpdater.cs | 104 ++++++++++++------ 1 file changed, 69 insertions(+), 35 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs index 1d6b24c2cb..f2bbe873d8 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs @@ -26,20 +26,24 @@ namespace Volo.Abp.Cli.ProjectModification private readonly PackageJsonFileFinder _packageJsonFileFinder; private readonly NpmGlobalPackagesChecker _npmGlobalPackagesChecker; + private readonly MyGetPackageListFinder _myGetPackageListFinder; private readonly Dictionary _fileVersionStorage = new Dictionary(); + private MyGetApiResponse _myGetApiResponse; public NpmPackagesUpdater( PackageJsonFileFinder packageJsonFileFinder, NpmGlobalPackagesChecker npmGlobalPackagesChecker, + MyGetPackageListFinder myGetPackageListFinder, ICancellationTokenProvider cancellationTokenProvider) { _packageJsonFileFinder = packageJsonFileFinder; _npmGlobalPackagesChecker = npmGlobalPackagesChecker; + _myGetPackageListFinder = myGetPackageListFinder; CancellationTokenProvider = cancellationTokenProvider; Logger = NullLogger.Instance; } - public async Task Update(string rootDirectory, bool includePreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false) + public async Task Update(string rootDirectory, bool includePreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false, string version = null) { var fileList = _packageJsonFileFinder.Find(rootDirectory); @@ -54,7 +58,7 @@ namespace Volo.Abp.Cli.ProjectModification async Task UpdateAsync(string file) { - var updated = await UpdatePackagesInFile(file, includePreviews, includeReleaseCandidates, switchToStable); + var updated = await UpdatePackagesInFile(file, includePreviews,includeReleaseCandidates, switchToStable, version); packagesUpdated.TryAdd(file, updated); } @@ -99,8 +103,7 @@ namespace Volo.Abp.Cli.ProjectModification private static async Task NpmrcFileExistAsync(string directoryName) { - var result = File.Exists(Path.Combine(directoryName, ".npmrc")); - return await Task.FromResult(result); + return File.Exists(Path.Combine(directoryName, ".npmrc")); } private async Task CreateNpmrcFileAsync(string directoryName) @@ -154,19 +157,18 @@ namespace Volo.Abp.Cli.ProjectModification { using (var client = new CliHttpClient(TimeSpan.FromMinutes(1))) { - using (var response = await client.GetHttpResponseMessageWithRetryAsync( - $"{CliUrls.WwwAbpIo}api/myget/apikey/", - CancellationTokenProvider.Token, - Logger - )) - { - return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync()); - } + var response = await client.GetHttpResponseMessageWithRetryAsync( + url: $"{CliUrls.WwwAbpIo}api/myget/apikey/", + cancellationToken: CancellationTokenProvider.Token, + logger: Logger + ); + + return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync()); } } catch (Exception) { - return string.Empty; + return ""; } } @@ -179,7 +181,8 @@ namespace Volo.Abp.Cli.ProjectModification string filePath, bool includePreviews = false, bool includeReleaseCandidates = false, - bool switchToStable = false) + bool switchToStable = false, + string specifiedVersion = null) { var packagesUpdated = false; var fileContent = File.ReadAllText(filePath); @@ -193,7 +196,7 @@ namespace Volo.Abp.Cli.ProjectModification foreach (var abpPackage in abpPackages) { - var updated = await TryUpdatingPackage(filePath, abpPackage, includePreviews, includeReleaseCandidates, switchToStable); + var updated = await TryUpdatingPackage(filePath, abpPackage, includePreviews, includeReleaseCandidates, switchToStable, specifiedVersion); if (updated) { @@ -213,28 +216,45 @@ namespace Volo.Abp.Cli.ProjectModification JProperty package, bool includePreviews = false, bool includeReleaseCandidates = false, - bool switchToStable = false) + bool switchToStable = false, + string specifiedVersion = null) { - var currentVersion = (string)package.Value; + var currentVersion = (string) package.Value; - string version; - - if ((includePreviews || (!switchToStable && (currentVersion != null && currentVersion.Contains("-preview")))) && !includeReleaseCandidates) + var version = ""; + if (!specifiedVersion.IsNullOrWhiteSpace()) { - version = "preview"; + if (!SpecifiedVersionExists(specifiedVersion, package)) + { + return false; + } + + if (SemanticVersion.Parse(specifiedVersion) <= SemanticVersion.Parse(currentVersion.RemovePreFix("~", "^"))) + { + return false; + } + version = specifiedVersion.EnsureStartsWith('^'); } else { - if (!switchToStable && IsPrerelease(currentVersion)) + if ((includePreviews || (!switchToStable && currentVersion.Contains("-preview"))) && !includeReleaseCandidates) { - version = await GetLatestVersion(package, true); + version = "preview"; } else { - version = await GetLatestVersion(package, includeReleaseCandidates); + if (!switchToStable && IsPrerelease(currentVersion)) + { + version = await GetLatestVersion(package, true); + } + else + { + version = await GetLatestVersion(package, includeReleaseCandidates); + } } } + if (string.IsNullOrEmpty(version) || version == currentVersion) { return false; @@ -242,8 +262,8 @@ namespace Volo.Abp.Cli.ProjectModification package.Value.Replace(version); - Logger.LogInformation($"Updated {package.Name} to {version} in {filePath.Replace(Directory.GetCurrentDirectory(), "")}."); - + Logger.LogInformation( + $"Updated {package.Name} to {version} in {filePath.Replace(Directory.GetCurrentDirectory(), "")}."); return true; } @@ -257,16 +277,16 @@ namespace Volo.Abp.Cli.ProjectModification return version.Split("-", StringSplitOptions.RemoveEmptyEntries).Length > 1; } - protected virtual async Task GetLatestVersion(JProperty package, bool includeReleaseCandidates = false) + protected virtual async Task GetLatestVersion( + JProperty package, + bool includeReleaseCandidates = false) { if (_fileVersionStorage.ContainsKey(package.Name)) { - return await Task.FromResult(_fileVersionStorage[package.Name]); + return _fileVersionStorage[package.Name]; } - var versionListAsJson = CmdHelper.RunCmdAndGetOutput($"npm show {package.Name} versions"); - var versionList = JsonConvert.DeserializeObject(versionListAsJson) - .OrderByDescending(SemanticVersion.Parse, new VersionComparer()).ToList(); + var versionList = GetPackageVersionList(package); var newVersion = includeReleaseCandidates ? versionList.First() @@ -275,24 +295,24 @@ namespace Volo.Abp.Cli.ProjectModification if (string.IsNullOrEmpty(newVersion)) { _fileVersionStorage[package.Name] = newVersion; - return await Task.FromResult(newVersion); + return newVersion; } var newVersionWithPrefix = $"~{newVersion}"; _fileVersionStorage[package.Name] = newVersionWithPrefix; - return await Task.FromResult(newVersionWithPrefix); + return newVersionWithPrefix; } protected virtual List GetAbpPackagesFromPackageJson(JObject fileObject) { - var dependencyList = new[] { "dependencies", "devDependencies", "peerDependencies" }; + var dependencyList = new[] {"dependencies", "devDependencies", "peerDependencies"}; var abpPackages = new List(); foreach (var dependencyListName in dependencyList) { - var dependencies = (JObject)fileObject[dependencyListName]; + var dependencies = (JObject) fileObject[dependencyListName]; if (dependencies == null) { @@ -324,5 +344,19 @@ namespace Volo.Abp.Cli.ProjectModification Logger.LogInformation($"Running npm install on {fileDirectory}"); CmdHelper.RunCmd($"cd {fileDirectory} && npm install"); } + + protected virtual List GetPackageVersionList(JProperty package) + { + var versionListAsJson = CmdHelper.RunCmdAndGetOutput($"npm show {package.Name} versions"); + return JsonConvert.DeserializeObject(versionListAsJson) + .OrderByDescending(SemanticVersion.Parse, new VersionComparer()).ToList(); + } + + protected virtual bool SpecifiedVersionExists(string version, JProperty package) + { + var versionList = GetPackageVersionList(package); + + return versionList.Any(v => v.Equals(version, StringComparison.OrdinalIgnoreCase)); + } } }