File: NuGet\NuGetPackageOperationConfiguration.cs
Web Access
Project: src\src\Aspire.Cli\Aspire.Cli.csproj (aspire)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace Aspire.Cli.NuGet;
 
/// <summary>
/// Owns the effective working directory and optional overlay for one package or template invocation.
/// </summary>
internal sealed class NuGetPackageOperationConfiguration : IDisposable
{
    private readonly TemporaryNuGetConfigFile? _temporaryConfig;
 
    private NuGetPackageOperationConfiguration(
        DirectoryInfo originalWorkingDirectory,
        DirectoryInfo effectiveWorkingDirectory,
        FileInfo? explicitConfigFile,
        FileInfo? configurationFile,
        string cacheIdentity,
        TemporaryNuGetConfigFile? temporaryConfig)
    {
        OriginalWorkingDirectory = originalWorkingDirectory;
        EffectiveWorkingDirectory = effectiveWorkingDirectory;
        ExplicitConfigFile = explicitConfigFile;
        ConfigurationFile = configurationFile;
        CacheIdentity = cacheIdentity;
        _temporaryConfig = temporaryConfig;
    }
 
    public DirectoryInfo OriginalWorkingDirectory { get; }
 
    public DirectoryInfo EffectiveWorkingDirectory { get; }
 
    /// <summary>
    /// Gets a caller-supplied config passed through an explicit <c>--configfile</c> option.
    /// Generated overlays remain null so NuGet discovers the overlay and its parent hierarchy.
    /// </summary>
    public FileInfo? ExplicitConfigFile { get; }
 
    public FileInfo? ConfigurationFile { get; }
 
    public string CacheIdentity { get; }
 
    public static NuGetPackageOperationConfiguration Ambient(
        DirectoryInfo workingDirectory,
        string cacheIdentity)
        => new(
            workingDirectory,
            workingDirectory,
            explicitConfigFile: null,
            configurationFile: null,
            cacheIdentity,
            temporaryConfig: null);
 
    public static NuGetPackageOperationConfiguration FromTemporaryOverlay(
        DirectoryInfo workingDirectory,
        TemporaryNuGetConfigFile temporaryConfig,
        string ambientCacheIdentity)
        => new(
            workingDirectory,
            temporaryConfig.ConfigFile.Directory!,
            explicitConfigFile: null,
            temporaryConfig.ConfigFile,
            BundleNuGetService.CombineCacheIdentities(
                ambientCacheIdentity,
                temporaryConfig.CacheIdentity),
            temporaryConfig);
 
    public static NuGetPackageOperationConfiguration FromExistingConfiguration(
        DirectoryInfo workingDirectory,
        FileInfo? configurationFile)
        => new(
            workingDirectory,
            workingDirectory,
            configurationFile,
            configurationFile,
            configurationFile?.FullName ?? "ambient",
            temporaryConfig: null);
 
    public void Dispose() => _temporaryConfig?.Dispose();
}