Browse Source

Merge pull request #5563 from abpframework/abp/ng.schematics-cli-version-compare

Proxy Generator: ABP CLI should warn developer when project has @abp/ng.schematics with a different version
pull/5576/head
Halil İbrahim Kalkan 6 years ago
committed by GitHub
parent
commit
6401183660
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 15
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs
  2. 5
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs
  3. 38
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs
  4. 7
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs

15
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs

@ -73,7 +73,7 @@ namespace Volo.Abp.Cli
{
var assembly = typeof(CliService).Assembly;
var toolPath = GetToolPath(assembly);
var currentCliVersion = await GetCurrentCliVersion(assembly);
var currentCliVersion = await GetCurrentCliVersionInternalAsync(assembly);
var updateChannel = GetUpdateChannel(currentCliVersion);
Logger.LogInformation($"Version {currentCliVersion} ({updateChannel})");
@ -94,7 +94,7 @@ namespace Volo.Abp.Cli
}
}
private static string GetToolPath(Assembly assembly)
private string GetToolPath(Assembly assembly)
{
if (!assembly.Location.Contains(".store"))
{
@ -104,7 +104,12 @@ namespace Volo.Abp.Cli
return assembly.Location.Substring(0, assembly.Location.IndexOf(".store", StringComparison.Ordinal));
}
private static async Task<SemanticVersion> GetCurrentCliVersion(Assembly assembly)
public async Task<SemanticVersion> GetCurrentCliVersionAsync(Assembly assembly)
{
return await GetCurrentCliVersionInternalAsync(assembly);
}
private async Task<SemanticVersion> GetCurrentCliVersionInternalAsync(Assembly assembly)
{
SemanticVersion currentCliVersion = default;
@ -134,7 +139,7 @@ namespace Volo.Abp.Cli
return currentCliVersion;
}
private static UpdateChannel GetUpdateChannel(SemanticVersion currentCliVersion)
private UpdateChannel GetUpdateChannel(SemanticVersion currentCliVersion)
{
if (!currentCliVersion.IsPrerelease)
{
@ -172,7 +177,7 @@ namespace Volo.Abp.Cli
}
}
private static bool IsGlobalTool(string toolPath)
private bool IsGlobalTool(string toolPath)
{
var globalPaths = new[] { @"%USERPROFILE%\.dotnet\tools\", "%HOME%/.dotnet/tools/", };
return globalPaths.Select(Environment.ExpandEnvironmentVariables).Contains(toolPath);

5
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs

@ -7,5 +7,10 @@ namespace Volo.Abp.Cli.Commands
protected override string CommandName => Name;
protected override string SchematicsCommandName => "proxy-add";
public GenerateProxyCommand(CliService cliService)
: base(cliService)
{
}
}
}

38
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs

@ -2,7 +2,10 @@
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Newtonsoft.Json.Linq;
using NuGet.Versioning;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
@ -11,14 +14,23 @@ namespace Volo.Abp.Cli.Commands
{
public abstract class ProxyCommandBase : IConsoleCommand, ITransientDependency
{
public CliService CliService { get; }
public ILogger<HelpCommand> Logger { get; set; }
protected abstract string CommandName { get; }
protected abstract string SchematicsCommandName { get; }
public Task ExecuteAsync(CommandLineArgs commandLineArgs)
public ProxyCommandBase(CliService cliService)
{
CliService = cliService;
Logger = NullLogger<HelpCommand>.Instance;
}
public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
CheckAngularJsonFile();
CheckNgSchematics();
await CheckNgSchematicsAsync();
var prompt = commandLineArgs.Options.ContainsKey("p") || commandLineArgs.Options.ContainsKey("prompt");
var defaultValue = prompt ? null : "__default";
@ -51,11 +63,9 @@ namespace Volo.Abp.Cli.Commands
}
CmdHelper.RunCmd(commandBuilder.ToString());
return Task.CompletedTask;
}
private void CheckNgSchematics()
private async Task CheckNgSchematicsAsync()
{
var packageJsonPath = $"package.json";
@ -68,10 +78,10 @@ namespace Volo.Abp.Cli.Commands
);
}
var schematicsPackageNode =
var schematicsVersion =
(string) JObject.Parse(File.ReadAllText(packageJsonPath))["devDependencies"]?["@abp/ng.schematics"];
if (schematicsPackageNode == null)
if (schematicsVersion == null)
{
throw new CliUsageException(
"\"@abp/ng.schematics\" NPM package should be installed to the devDependencies before running this command!" +
@ -79,6 +89,20 @@ namespace Volo.Abp.Cli.Commands
GetUsageInfo()
);
}
var parseError = SemanticVersion.TryParse(schematicsVersion.TrimStart('~', '^', 'v'), out var semanticSchematicsVersion);
if (parseError)
{
Logger.LogWarning("Couldn't determinate version of \"@abp/ng.schematics\" package.");
return;
}
var cliVersion = await CliService.GetCurrentCliVersionAsync(typeof(CliService).Assembly);
if (semanticSchematicsVersion < cliVersion)
{
Logger.LogWarning("\"@abp/ng.schematics\" version is lower than ABP Cli version.");
return;
}
}
private void CheckAngularJsonFile()

7
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs

@ -7,5 +7,10 @@
protected override string CommandName => Name;
protected override string SchematicsCommandName => "proxy-remove";
public RemoveProxyCommand(CliService cliService)
: base(cliService)
{
}
}
}
}

Loading…
Cancel
Save