public async Task ExecuteAsync(CancellationToken token) { if (!NuGetVersion.TryParse(Version, out var parsedVersion)) { _logger.LogError("The version '{Version}' could not be parsed.", Version); return; } var isSemVer2 = parsedVersion.IsSemVer2 || SemVer2; var state = new PackageConsistencyState(); PackageQueryContext context; if (Gallery) { context = await _contextBuilder.GetPackageQueryContextFromGalleryAsync(Id, Version, state); } else if (Database) { context = await _contextBuilder.GetPackageQueryContextFromDatabaseAsync(Id, Version); if (context == null) { _logger.LogError("The package {Id} {Version} could not be found in the database.", Id, Version); return; } } else if (Deleted) { context = _contextBuilder.CreateDeletedPackageQueryContext(Id, Version); } else { context = _contextBuilder.CreateAvailablePackageQueryContext(Id, Version, isSemVer2, !Unlisted); } var report = await _service.GetReportAsync(context, state, NullProgressReporter.Instance); var reportJson = JsonConvert.SerializeObject( report, new JsonSerializerSettings { Converters = { new NuspecJsonConverter(), new StringEnumConverter(), }, Formatting = Formatting.Indented, }); _logger.LogInformation(reportJson); }
private async Task StartInternalAsync(string id, string version) { if (string.IsNullOrWhiteSpace(id)) { await InvokeErrorAsync("You must provide a package ID."); return; } if (!StrictPackageIdValidator.IsValid(id)) { await InvokeErrorAsync("The ID you provided is invalid."); return; } if (string.IsNullOrWhiteSpace(version)) { await InvokeErrorAsync("You must provide a package version."); return; } if (!NuGetVersion.TryParse(version, out var parsedVersion)) { await InvokeErrorAsync("The version you provided is invalid."); return; } await InvokeProgressAsync(0, $"Initializing package report for {id} {version}."); var state = new PackageConsistencyState(); var context = await _packageQueryContextBuilder.GetPackageQueryContextFromGalleryAsync(id, version, state); var packageDeletedStatus = state.Gallery.PackageState.PackageDeletedStatus; var isAvailable = packageDeletedStatus == PackageDeletedStatus.NotDeleted; string availability; switch (packageDeletedStatus) { case PackageDeletedStatus.NotDeleted: availability = "is available"; break; case PackageDeletedStatus.SoftDeleted: availability = "was soft deleted"; break; case PackageDeletedStatus.Unknown: availability = "was hard deleted or never published"; break; default: throw new NotImplementedException( $"The package deleted status {packageDeletedStatus} is not supported."); } await InvokeProgressAsync( 0, $"{context.Package.Id} {context.Package.Version} {availability}" + $"{(isAvailable && context.IsSemVer2 ? " and is SemVer 2.0.0" : string.Empty)}. " + $"The consistency report will now be generated."); var report = await _packageConsistencyService.GetReportAsync(context, state, new ProgressReporter(this)); await InvokeCompleteAsync(report); }