Browse Source

revert back

pull/6693/head
Alper Ebicoglu 6 years ago
parent
commit
da9d863c41
  1. 104
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs

104
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 PackageJsonFileFinder _packageJsonFileFinder;
private readonly NpmGlobalPackagesChecker _npmGlobalPackagesChecker; private readonly NpmGlobalPackagesChecker _npmGlobalPackagesChecker;
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( public NpmPackagesUpdater(
PackageJsonFileFinder packageJsonFileFinder, PackageJsonFileFinder packageJsonFileFinder,
NpmGlobalPackagesChecker npmGlobalPackagesChecker, NpmGlobalPackagesChecker npmGlobalPackagesChecker,
MyGetPackageListFinder myGetPackageListFinder,
ICancellationTokenProvider cancellationTokenProvider) ICancellationTokenProvider cancellationTokenProvider)
{ {
_packageJsonFileFinder = packageJsonFileFinder; _packageJsonFileFinder = packageJsonFileFinder;
_npmGlobalPackagesChecker = npmGlobalPackagesChecker; _npmGlobalPackagesChecker = npmGlobalPackagesChecker;
_myGetPackageListFinder = myGetPackageListFinder;
CancellationTokenProvider = cancellationTokenProvider; CancellationTokenProvider = cancellationTokenProvider;
Logger = NullLogger<NpmPackagesUpdater>.Instance; Logger = NullLogger<NpmPackagesUpdater>.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); var fileList = _packageJsonFileFinder.Find(rootDirectory);
@ -54,7 +58,7 @@ namespace Volo.Abp.Cli.ProjectModification
async Task UpdateAsync(string file) 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); packagesUpdated.TryAdd(file, updated);
} }
@ -99,8 +103,7 @@ namespace Volo.Abp.Cli.ProjectModification
private static async Task<bool> NpmrcFileExistAsync(string directoryName) private static async Task<bool> NpmrcFileExistAsync(string directoryName)
{ {
var result = File.Exists(Path.Combine(directoryName, ".npmrc")); return File.Exists(Path.Combine(directoryName, ".npmrc"));
return await Task.FromResult(result);
} }
private async Task CreateNpmrcFileAsync(string directoryName) 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 client = new CliHttpClient(TimeSpan.FromMinutes(1)))
{ {
using (var response = await client.GetHttpResponseMessageWithRetryAsync( var response = await client.GetHttpResponseMessageWithRetryAsync(
$"{CliUrls.WwwAbpIo}api/myget/apikey/", url: $"{CliUrls.WwwAbpIo}api/myget/apikey/",
CancellationTokenProvider.Token, cancellationToken: CancellationTokenProvider.Token,
Logger logger: Logger
)) );
{
return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync()); return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync());
}
} }
} }
catch (Exception) catch (Exception)
{ {
return string.Empty; return "";
} }
} }
@ -179,7 +181,8 @@ namespace Volo.Abp.Cli.ProjectModification
string filePath, string filePath,
bool includePreviews = false, bool includePreviews = false,
bool includeReleaseCandidates = false, bool includeReleaseCandidates = false,
bool switchToStable = false) bool switchToStable = false,
string specifiedVersion = null)
{ {
var packagesUpdated = false; var packagesUpdated = false;
var fileContent = File.ReadAllText(filePath); var fileContent = File.ReadAllText(filePath);
@ -193,7 +196,7 @@ namespace Volo.Abp.Cli.ProjectModification
foreach (var abpPackage in abpPackages) 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) if (updated)
{ {
@ -213,28 +216,45 @@ namespace Volo.Abp.Cli.ProjectModification
JProperty package, JProperty package,
bool includePreviews = false, bool includePreviews = false,
bool includeReleaseCandidates = 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; var version = "";
if (!specifiedVersion.IsNullOrWhiteSpace())
if ((includePreviews || (!switchToStable && (currentVersion != null && currentVersion.Contains("-preview")))) && !includeReleaseCandidates)
{ {
version = "preview"; if (!SpecifiedVersionExists(specifiedVersion, package))
{
return false;
}
if (SemanticVersion.Parse(specifiedVersion) <= SemanticVersion.Parse(currentVersion.RemovePreFix("~", "^")))
{
return false;
}
version = specifiedVersion.EnsureStartsWith('^');
} }
else else
{ {
if (!switchToStable && IsPrerelease(currentVersion)) if ((includePreviews || (!switchToStable && currentVersion.Contains("-preview"))) && !includeReleaseCandidates)
{ {
version = await GetLatestVersion(package, true); version = "preview";
} }
else 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) if (string.IsNullOrEmpty(version) || version == currentVersion)
{ {
return false; return false;
@ -242,8 +262,8 @@ namespace Volo.Abp.Cli.ProjectModification
package.Value.Replace(version); 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; return true;
} }
@ -257,16 +277,16 @@ namespace Volo.Abp.Cli.ProjectModification
return version.Split("-", StringSplitOptions.RemoveEmptyEntries).Length > 1; return version.Split("-", StringSplitOptions.RemoveEmptyEntries).Length > 1;
} }
protected virtual async Task<string> GetLatestVersion(JProperty package, bool includeReleaseCandidates = false) protected virtual async Task<string> GetLatestVersion(
JProperty package,
bool includeReleaseCandidates = false)
{ {
if (_fileVersionStorage.ContainsKey(package.Name)) 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 = GetPackageVersionList(package);
var versionList = JsonConvert.DeserializeObject<string[]>(versionListAsJson)
.OrderByDescending(SemanticVersion.Parse, new VersionComparer()).ToList();
var newVersion = includeReleaseCandidates var newVersion = includeReleaseCandidates
? versionList.First() ? versionList.First()
@ -275,24 +295,24 @@ namespace Volo.Abp.Cli.ProjectModification
if (string.IsNullOrEmpty(newVersion)) if (string.IsNullOrEmpty(newVersion))
{ {
_fileVersionStorage[package.Name] = newVersion; _fileVersionStorage[package.Name] = newVersion;
return await Task.FromResult(newVersion); return newVersion;
} }
var newVersionWithPrefix = $"~{newVersion}"; var newVersionWithPrefix = $"~{newVersion}";
_fileVersionStorage[package.Name] = newVersionWithPrefix; _fileVersionStorage[package.Name] = newVersionWithPrefix;
return await Task.FromResult(newVersionWithPrefix); return newVersionWithPrefix;
} }
protected virtual List<JProperty> GetAbpPackagesFromPackageJson(JObject fileObject) protected virtual List<JProperty> GetAbpPackagesFromPackageJson(JObject fileObject)
{ {
var dependencyList = new[] { "dependencies", "devDependencies", "peerDependencies" }; var dependencyList = new[] {"dependencies", "devDependencies", "peerDependencies"};
var abpPackages = new List<JProperty>(); var abpPackages = new List<JProperty>();
foreach (var dependencyListName in dependencyList) foreach (var dependencyListName in dependencyList)
{ {
var dependencies = (JObject)fileObject[dependencyListName]; var dependencies = (JObject) fileObject[dependencyListName];
if (dependencies == null) if (dependencies == null)
{ {
@ -324,5 +344,19 @@ namespace Volo.Abp.Cli.ProjectModification
Logger.LogInformation($"Running npm install on {fileDirectory}"); Logger.LogInformation($"Running npm install on {fileDirectory}");
CmdHelper.RunCmd($"cd {fileDirectory} && npm install"); CmdHelper.RunCmd($"cd {fileDirectory} && npm install");
} }
protected virtual List<string> GetPackageVersionList(JProperty package)
{
var versionListAsJson = CmdHelper.RunCmdAndGetOutput($"npm show {package.Name} versions");
return JsonConvert.DeserializeObject<string[]>(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));
}
} }
} }

Loading…
Cancel
Save