File: Commands\Tool\Install\ParseResultExtension.cs
Web Access
Project: ..\..\..\src\Cli\dotnet\dotnet.csproj (dotnet)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.CommandLine;
using Microsoft.DotNet.Cli.Utils;
using NuGet.Versioning;
 
namespace Microsoft.DotNet.Cli.Commands.Tool.Install;
 
internal static class ParseResultExtension
{
    public static VersionRange? GetVersionRange(this ParseResult parseResult)
    {
        var packageVersionFromIdentityArgument = parseResult.GetValue(ToolInstallCommandParser.PackageIdentityArgument).VersionRange?.OriginalString;
        var packageVersionFromVersionOption = parseResult.GetValue(ToolInstallCommandParser.VersionOption);
 
        // Check that only one of these has a value
        if (!string.IsNullOrEmpty(packageVersionFromIdentityArgument) && !string.IsNullOrEmpty(packageVersionFromVersionOption))
        {
            throw new GracefulException(CliStrings.PackageIdentityArgumentVersionOptionConflict);
        }
 
        string? packageVersion = packageVersionFromIdentityArgument ?? packageVersionFromVersionOption;
 
        bool prerelease = parseResult.GetValue(ToolInstallCommandParser.PrereleaseOption);
 
        if (!string.IsNullOrEmpty(packageVersion) && prerelease)
        {
            throw new GracefulException(
                string.Format(
                    CliCommandStrings.PrereleaseAndVersionAreNotSupportedAtTheSameTime,
                    packageVersion));
        }
 
        if (prerelease)
        {
            packageVersion = "*-*";
        }
 
        VersionRange? versionRange = null;
 
        // accept 'bare' versions and interpret 'bare' versions as NuGet exact versions
        if (!string.IsNullOrEmpty(packageVersion) && NuGetVersion.TryParse(packageVersion, out NuGetVersion? version2))
        {
            return new VersionRange(minVersion: version2, includeMinVersion: true, maxVersion: version2, includeMaxVersion: true, originalString: "[" + packageVersion + "]");
        }
 
        if (!string.IsNullOrEmpty(packageVersion) && !VersionRange.TryParse(packageVersion, out versionRange))
        {
            throw new GracefulException(
                string.Format(
                    CliCommandStrings.ToolInstallInvalidNuGetVersionRange,
                    packageVersion));
        }
        return versionRange;
    }
}