Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

#nullable enable

using System.Collections.Generic;
using System.CommandLine.Parsing;
using NuGet.Versioning;

namespace NuGet.CommandLine.XPlat.Commands.Package
{
internal record PackageWithNuGetVersion
Comment thread
Nigusu-Allehu marked this conversation as resolved.
{
public required string Id { get; init; }

public NuGetVersion? NuGetVersion { get; init; }

internal static IReadOnlyList<PackageWithNuGetVersion> Parse(ArgumentResult result)
{
if (result.Tokens.Count == 0)
Comment thread
Nigusu-Allehu marked this conversation as resolved.
{
return [];
}

var packages = new List<PackageWithNuGetVersion>(result.Tokens.Count);

foreach (var token in result.Tokens)
{
string? packageId;
NuGetVersion? newExactVersion = null;

int separatorIndex = token.Value.IndexOf('@');

Comment thread
Nigusu-Allehu marked this conversation as resolved.
if (separatorIndex < 0)
{
packageId = token.Value;
}
else
{
packageId = token.Value.Substring(0, separatorIndex);
string versionString = token.Value.Substring(separatorIndex + 1);

if (string.IsNullOrEmpty(versionString))
{
result.AddError(Messages.Error_MissingVersion(token.Value));
return [];
}

if (!NuGetVersion.TryParse(versionString, out newExactVersion))
{
result.AddError(Messages.Error_InvalidVersion(versionString));
return [];
}
}

var package = new PackageWithNuGetVersion
{
Id = packageId,
NuGetVersion = newExactVersion
};

packages.Add(package);
}

return packages;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,21 @@
using System.Diagnostics.CodeAnalysis;
using NuGet.Versioning;

namespace NuGet.CommandLine.XPlat.Commands.Package.Update
namespace NuGet.CommandLine.XPlat.Commands.Package
{
internal record Package : IEqualityComparer<Package>
internal record PackageWithVersionRange : IEqualityComparer<PackageWithVersionRange>
{
public required string Id { get; init; }
public required VersionRange? VersionRange { get; init; }

internal static IReadOnlyList<Package> Parse(ArgumentResult result)
internal static IReadOnlyList<PackageWithVersionRange> Parse(ArgumentResult result)
{
if (result.Tokens.Count == 0)
{
return [];
}

List<Package> packages = new List<Package>(result.Tokens.Count);
List<PackageWithVersionRange> packages = new List<PackageWithVersionRange>(result.Tokens.Count);

foreach (var token in result.Tokens)
{
Expand Down Expand Up @@ -51,7 +51,7 @@ internal static IReadOnlyList<Package> Parse(ArgumentResult result)
}
}

var package = new Package
var package = new PackageWithVersionRange
{
Id = packageId,
VersionRange = newVersion
Expand All @@ -62,7 +62,7 @@ internal static IReadOnlyList<Package> Parse(ArgumentResult result)
return packages;
}

public bool Equals(Package? x, Package? y)
public bool Equals(PackageWithVersionRange? x, PackageWithVersionRange? y)
{
if (ReferenceEquals(x, y))
{
Expand All @@ -82,7 +82,7 @@ public bool Equals(Package? x, Package? y)
return VersionRangeComparer.Default.Equals(x.VersionRange, y.VersionRange);
}

public int GetHashCode([DisallowNull] Package obj)
public int GetHashCode([DisallowNull] PackageWithVersionRange obj)
{
HashCode hash = new HashCode();
hash.Add(obj.Id, StringComparer.OrdinalIgnoreCase);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ internal record PackageUpdateArgs
{
public required string Project { get; init; }

public required IReadOnlyList<Package> Packages { get; init; }
public required IReadOnlyList<PackageWithVersionRange> Packages { get; init; }

public required bool Interactive { get; init; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ internal static void Register(Command packageCommand, Option<bool> interactiveOp
{
var command = new DocumentedCommand("update", Strings.PackageUpdateCommand_Description, "https://aka.ms/dotnet/package/update");

var packagesArguments = new Argument<IReadOnlyList<Package>>("packages")
var packagesArguments = new Argument<IReadOnlyList<PackageWithVersionRange>>("packages")
{
Description = Strings.PackageUpdate_PackageArgumentDescription,
Arity = ArgumentArity.ZeroOrMore,
CustomParser = Package.Parse
CustomParser = PackageWithVersionRange.Parse
};
command.Arguments.Add(packagesArguments);

Expand All @@ -49,7 +49,7 @@ internal static void Register(Command packageCommand, Option<bool> interactiveOp
command.SetAction(async (args, cancellationToken) =>
{
FileSystemInfo? project = args.GetValue(projectOption);
IReadOnlyList<Package> packages = args.GetValue(packagesArguments) ?? [];
IReadOnlyList<PackageWithVersionRange> packages = args.GetValue(packagesArguments) ?? [];
bool interactive = args.GetValue(interactiveOption);
VerbosityEnum verbosity = args.GetValue(verbosityOption) ?? VerbosityEnum.normal;
LogLevel logLevel = verbosity.ToLogLevel();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ internal static async Task<int> Run(PackageUpdateArgs args, ILoggerWithColor log
}

private static async Task<(List<PackageUpdateResult> vulnerablePackages, int packagesScanned)> SelectVulnerablePackagesToUpdateAsync(
IReadOnlyList<Package>? packages,
IReadOnlyList<PackageWithVersionRange>? packages,
DependencyGraphSpec dgSpec,
ILoggerWithColor logger,
IPackageUpdateIO packageUpdateIO,
Expand Down Expand Up @@ -283,7 +283,7 @@ bool PackageHasVulnerability(string packageId, NuGetVersion version, IReadOnlyLi
}

internal static async Task<List<PackageUpdateResult>> SelectPackagesToUpdateAsync(
IReadOnlyList<Package> packages,
IReadOnlyList<PackageWithVersionRange> packages,
PackageSpec project,
ILoggerWithColor logger,
IPackageUpdateIO packageUpdateIO,
Expand Down Expand Up @@ -499,7 +499,7 @@ private static (VersionRange? version, List<string> targetFrameworks)
return successful ? (packagesToUpdate, allProjectPackages.Count) : (null, allProjectPackages.Count);
}

private static List<(Package identity, List<string> tfms)>? GetAllPackagesReferencedByProject(PackageSpec project, ILoggerWithColor logger)
private static List<(PackageWithVersionRange identity, List<string> tfms)>? GetAllPackagesReferencedByProject(PackageSpec project, ILoggerWithColor logger)
{
var allPackages = new Dictionary<string, (VersionRange version, List<string> tfms, bool hasError)>(StringComparer.OrdinalIgnoreCase);
bool hasErrors = false;
Expand Down Expand Up @@ -543,10 +543,10 @@ private static (VersionRange? version, List<string> targetFrameworks)
return null;
}

List<(Package package, List<string> tfms)> result = new(allPackages.Count);
List<(PackageWithVersionRange package, List<string> tfms)> result = new(allPackages.Count);
foreach (var kvp in allPackages)
{
var package = new Package { Id = kvp.Key, VersionRange = kvp.Value.version };
var package = new PackageWithVersionRange { Id = kvp.Key, VersionRange = kvp.Value.version };
result.Add((package, kvp.Value.tfms));
}

Expand Down
6 changes: 6 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/Messages.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@ internal static string Error_InvalidVersionRange(string input)
return string.Format(CultureInfo.CurrentCulture, Strings.Error_InvalidVersionRange, input);
}

/// <inheritdoc cref="Strings.Error_InvalidVersion"/>
internal static string Error_InvalidVersion(string input)
{
return string.Format(CultureInfo.CurrentCulture, Strings.Error_InvalidVersion, input);
}

/// <inheritdoc cref="Strings.Error_PackageSourceMappingNotFound"/>
internal static string Error_PackageSourceMappingNotFound(string packageId)
{
Expand Down
11 changes: 10 additions & 1 deletion src/NuGet.Core/NuGet.CommandLine.XPlat/Strings.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/Strings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -1104,4 +1104,8 @@ Do not translate "PackageVersion"</comment>
<data name="ArgumentNullOrEmpty" xml:space="preserve">
<value>Argument cannot be null or empty.</value>
</data>
<data name="Error_InvalidVersion" xml:space="preserve">
<value>Invalid version value '{0}'.</value>
<comment>0 - package version</comment>
</data>
</root>
5 changes: 5 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/xlf/Strings.cs.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ NuGet vyžaduje zdroje HTTPS. Pokud chcete používat zdroje HTTP, musíte v sou
<target state="translated">Zadaný zdroj {0} není platný. Zadejte platný zdroj.</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">Neplatný rozsah verzí {0}</target>
Expand Down
5 changes: 5 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/xlf/Strings.de.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ NuGet erfordert HTTPS-Quellen. Um HTTP-Quellen zu verwenden, müssen Sie „allo
<target state="translated">Die angegebene Quelle "{0}" ist ungültig. Geben Sie eine gültige Quelle an.</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">Ungültiger Versionsbereich „{0}“</target>
Expand Down
5 changes: 5 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/xlf/Strings.es.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ NuGet requiere orígenes HTTPS. Para usar orígenes HTTP, es necesario establece
<target state="translated">El origen "{0}" especificado no es válido. Proporcione un origen válido.</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">Intervalo de versiones no válido "{0}"</target>
Expand Down
5 changes: 5 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/xlf/Strings.fr.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ NuGet nécessite des sources HTTPS. Pour utiliser des sources HTTP, vous devez d
<target state="translated">La source spécifiée '{0}' est non valide. Indiquez une source valide.</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">Étendue de version non valide « {0} »</target>
Expand Down
5 changes: 5 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/xlf/Strings.it.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ NuGet richiede origini HTTPS. Per utilizzare origini HTTP, è necessario imposta
<target state="translated">L'origine '{0}' specificata non è valida. Specificare un'origine valida.</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">Intervallo versioni non valido '{0}'</target>
Expand Down
5 changes: 5 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/xlf/Strings.ja.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ NuGet には HTTPS ソースが必要です。HTTP ソースを使用するに
<target state="translated">指定されたソース '{0}' が正しくありません。有効なソースを指定してください。</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">バージョン範囲 '{0}' が無効です</target>
Expand Down
5 changes: 5 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/xlf/Strings.ko.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ NuGet에는 HTTPS 원본이 필요합니다. HTTP 원본을 사용하려면 NuGe
<target state="translated">지정된 소스 '{0}'이(가) 올바르지 않습니다. 유효한 소스를 제공하세요.</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">잘못된 버전 범위 '{0}'</target>
Expand Down
5 changes: 5 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/xlf/Strings.pl.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ Menedżer NuGet wymaga źródeł HTTPS. Aby użyć źródeł HTTP, musisz wyraź
<target state="translated">Określone źródło „{0}” jest nieprawidłowe. Określ prawidłowe źródło.</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">Nieprawidłowy zakres wersji „{0}”</target>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ O NuGet requer fontes HTTPS. Para usar fontes HTTP, você deve definir explicita
<target state="translated">A origem especificada '{0}' é inválida. Forneça uma origem válida.</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">Intervalo de versão "{0}" inválido</target>
Expand Down
5 changes: 5 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/xlf/Strings.ru.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ NuGet requires HTTPS sources. To use HTTP sources, you must explicitly set 'allo
<target state="translated">Указанный источник "{0}" является недопустимым. Укажите допустимый источник.</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">Недопустимый диапазон версий "{0}"</target>
Expand Down
5 changes: 5 additions & 0 deletions src/NuGet.Core/NuGet.CommandLine.XPlat/xlf/Strings.tr.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,11 @@ NuGet için HTTPS kaynakları gereklidir. HTTP kaynaklarını kullanmak için Nu
<target state="translated">Belirtilen '{0}' kaynağı geçersiz. Geçerli bir kaynak belirtin.</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">Geçersiz sürüm aralığı '{0}'</target>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ NuGet 需要 HTTPS 源。要使用 HTTP 源,必须在 NuGet.Config 文件中
<target state="translated">指定的源“{0}”无效。请提供有效的源。</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">版本范围“{0}”无效</target>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ NuGet 需要 HTTPS 來源。您必須在 NuGet.Config 檔案中將 'allowInsecur
<target state="translated">指定的來源 '{0}' 無效。請提供有效的來源。</target>
<note>0 - The invalid source.</note>
</trans-unit>
<trans-unit id="Error_InvalidVersion">
<source>Invalid version value '{0}'.</source>
<target state="new">Invalid version value '{0}'.</target>
<note>0 - package version</note>
</trans-unit>
<trans-unit id="Error_InvalidVersionRange">
<source>Invalid version range '{0}'</source>
<target state="translated">不正確版本範圍 '{0}'</target>
Expand Down
Loading