dependabot-nuget 0.279.0 → 0.280.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Analyze.cs +7 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Discover.cs +6 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/AnalyzeWorker.cs +8 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DiscoveryWorker.cs +7 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ErrorType.cs +1 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/NativeResult.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/JobErrorBase.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UpdateNotPossible.cs +6 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +7 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/UpdateNotPossibleException.cs +11 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackagesConfigUpdater.cs +2 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/SdkPackageUpdater.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/UpdaterWorker.cs +18 -3
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +11 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTestBase.cs +5 -9
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTestBase.cs +5 -8
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTestBase.cs +2 -7
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackagesConfig.cs +79 -1
- data/lib/dependabot/nuget/native_helpers.rb +5 -3
- metadata +12 -10
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 2728d8749a316ac4ecbd46826beffaefc51e5101c1154d0fdef5ad756158c256
         | 
| 4 | 
            +
              data.tar.gz: 3ec34208b76ed22dbef3ae0e49511e77f85d73aea1b980180292b5225e26367a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4cf2906e79a866fb5c4d89807e893d6486f1fae08b9b951da9a049fbd546cc59d522d6b8ace80fe0ee59353eb93224b648370b404bf69ff845d89fafd70894ba
         | 
| 7 | 
            +
              data.tar.gz: '05801823dee91eba1e490ee4fef1d44a2e83f632c7823c5ae6bd9cd3955d085c8c6c5e015023c4a6a0e34ed453e2e3d956c9399f955d608fd87381ef2ff620d7'
         | 
| @@ -1,8 +1,10 @@ | |
| 1 1 | 
             
            using System.Text;
         | 
| 2 | 
            +
            using System.Text.Json;
         | 
| 2 3 | 
             
            using System.Xml.Linq;
         | 
| 3 4 |  | 
| 4 5 | 
             
            using NuGetUpdater.Core;
         | 
| 5 6 | 
             
            using NuGetUpdater.Core.Analyze;
         | 
| 7 | 
            +
            using NuGetUpdater.Core.Discover;
         | 
| 6 8 | 
             
            using NuGetUpdater.Core.Test;
         | 
| 7 9 | 
             
            using NuGetUpdater.Core.Test.Analyze;
         | 
| 8 10 | 
             
            using NuGetUpdater.Core.Test.Update;
         | 
| @@ -334,6 +336,11 @@ public partial class EntryPointTests | |
| 334 336 | 
             
                                Console.SetOut(originalOut);
         | 
| 335 337 | 
             
                                Console.SetError(originalErr);
         | 
| 336 338 | 
             
                            }
         | 
| 339 | 
            +
             | 
| 340 | 
            +
                            var resultPath = Path.Join(path, AnalyzeWorker.AnalysisDirectoryName, $"{dependencyName}.json");
         | 
| 341 | 
            +
                            var resultJson = await File.ReadAllTextAsync(resultPath);
         | 
| 342 | 
            +
                            var resultObject = JsonSerializer.Deserialize<AnalysisResult>(resultJson, DiscoveryWorker.SerializerOptions);
         | 
| 343 | 
            +
                            return resultObject!;
         | 
| 337 344 | 
             
                        });
         | 
| 338 345 |  | 
| 339 346 | 
             
                        ValidateAnalysisResult(expectedResult, actualResult);
         | 
| @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            using System.Text;
         | 
| 2 | 
            +
            using System.Text.Json;
         | 
| 2 3 |  | 
| 3 4 | 
             
            using NuGetUpdater.Core;
         | 
| 4 5 | 
             
            using NuGetUpdater.Core.Discover;
         | 
| @@ -390,6 +391,11 @@ public partial class EntryPointTests | |
| 390 391 | 
             
                                Console.SetOut(originalOut);
         | 
| 391 392 | 
             
                                Console.SetError(originalErr);
         | 
| 392 393 | 
             
                            }
         | 
| 394 | 
            +
             | 
| 395 | 
            +
                            var resultPath = Path.Join(path, DiscoveryWorker.DiscoveryResultFileName);
         | 
| 396 | 
            +
                            var resultJson = await File.ReadAllTextAsync(resultPath);
         | 
| 397 | 
            +
                            var resultObject = JsonSerializer.Deserialize<WorkspaceDiscoveryResult>(resultJson, DiscoveryWorker.SerializerOptions);
         | 
| 398 | 
            +
                            return resultObject!;
         | 
| 393 399 | 
             
                        });
         | 
| 394 400 |  | 
| 395 401 | 
             
                        ValidateWorkspaceResult(expectedResult, actualResult);
         | 
| @@ -30,6 +30,13 @@ public partial class AnalyzeWorker | |
| 30 30 | 
             
                }
         | 
| 31 31 |  | 
| 32 32 | 
             
                public async Task RunAsync(string repoRoot, string discoveryPath, string dependencyPath, string analysisDirectory)
         | 
| 33 | 
            +
                {
         | 
| 34 | 
            +
                    var analysisResult = await RunWithErrorHandlingAsync(repoRoot, discoveryPath, dependencyPath);
         | 
| 35 | 
            +
                    var dependencyInfo = await DeserializeJsonFileAsync<DependencyInfo>(dependencyPath, nameof(DependencyInfo));
         | 
| 36 | 
            +
                    await WriteResultsAsync(analysisDirectory, dependencyInfo.Name, analysisResult, _logger);
         | 
| 37 | 
            +
                }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                internal async Task<AnalysisResult> RunWithErrorHandlingAsync(string repoRoot, string discoveryPath, string dependencyPath)
         | 
| 33 40 | 
             
                {
         | 
| 34 41 | 
             
                    AnalysisResult analysisResult;
         | 
| 35 42 | 
             
                    var discovery = await DeserializeJsonFileAsync<WorkspaceDiscoveryResult>(discoveryPath, nameof(WorkspaceDiscoveryResult));
         | 
| @@ -54,7 +61,7 @@ public partial class AnalyzeWorker | |
| 54 61 | 
             
                        };
         | 
| 55 62 | 
             
                    }
         | 
| 56 63 |  | 
| 57 | 
            -
                     | 
| 64 | 
            +
                    return analysisResult;
         | 
| 58 65 | 
             
                }
         | 
| 59 66 |  | 
| 60 67 | 
             
                public async Task<AnalysisResult> RunAsync(string repoRoot, WorkspaceDiscoveryResult discovery, DependencyInfo dependencyInfo)
         | 
| @@ -31,6 +31,12 @@ public partial class DiscoveryWorker | |
| 31 31 | 
             
                }
         | 
| 32 32 |  | 
| 33 33 | 
             
                public async Task RunAsync(string repoRootPath, string workspacePath, string outputPath)
         | 
| 34 | 
            +
                {
         | 
| 35 | 
            +
                    var result = await RunWithErrorHandlingAsync(repoRootPath, workspacePath);
         | 
| 36 | 
            +
                    await WriteResultsAsync(repoRootPath, outputPath, result);
         | 
| 37 | 
            +
                }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                internal async Task<WorkspaceDiscoveryResult> RunWithErrorHandlingAsync(string repoRootPath, string workspacePath)
         | 
| 34 40 | 
             
                {
         | 
| 35 41 | 
             
                    WorkspaceDiscoveryResult result;
         | 
| 36 42 | 
             
                    try
         | 
| @@ -49,7 +55,7 @@ public partial class DiscoveryWorker | |
| 49 55 | 
             
                        };
         | 
| 50 56 | 
             
                    }
         | 
| 51 57 |  | 
| 52 | 
            -
                     | 
| 58 | 
            +
                    return result;
         | 
| 53 59 | 
             
                }
         | 
| 54 60 |  | 
| 55 61 | 
             
                internal async Task<WorkspaceDiscoveryResult> RunAsync(string repoRootPath, string workspacePath)
         | 
| @@ -139,6 +139,7 @@ internal static class PackagesConfigUpdater | |
| 139 139 |  | 
| 140 140 | 
             
                                if (exitCodeAgain != 0)
         | 
| 141 141 | 
             
                                {
         | 
| 142 | 
            +
                                    MSBuildHelper.ThrowOnMissingPackages(restoreOutput);
         | 
| 142 143 | 
             
                                    throw new Exception($"Unable to restore.\nOutput:\n${restoreOutput}\n");
         | 
| 143 144 | 
             
                                }
         | 
| 144 145 |  | 
| @@ -147,6 +148,7 @@ internal static class PackagesConfigUpdater | |
| 147 148 |  | 
| 148 149 | 
             
                            MSBuildHelper.ThrowOnUnauthenticatedFeed(fullOutput);
         | 
| 149 150 | 
             
                            MSBuildHelper.ThrowOnMissingFile(fullOutput);
         | 
| 151 | 
            +
                            MSBuildHelper.ThrowOnMissingPackages(fullOutput);
         | 
| 150 152 | 
             
                            throw new Exception(fullOutput);
         | 
| 151 153 | 
             
                        }
         | 
| 152 154 | 
             
                    }
         | 
| @@ -350,7 +350,7 @@ internal static class SdkPackageUpdater | |
| 350 350 | 
             
                            var specificResolvedDependency = resolvedDependencies.Where(d => d.Name.Equals(dependencyName, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
         | 
| 351 351 | 
             
                            if (specificResolvedDependency is null)
         | 
| 352 352 | 
             
                            {
         | 
| 353 | 
            -
                                logger.Log($"    Unable resolve requested dependency for {dependencyName} in {projectFile.Path}.");
         | 
| 353 | 
            +
                                logger.Log($"    Unable to resolve requested dependency for {dependencyName} in {projectFile.Path}.");
         | 
| 354 354 | 
             
                                continue;
         | 
| 355 355 | 
             
                            }
         | 
| 356 356 |  | 
| @@ -24,6 +24,16 @@ public class UpdaterWorker | |
| 24 24 | 
             
                }
         | 
| 25 25 |  | 
| 26 26 | 
             
                public async Task RunAsync(string repoRootPath, string workspacePath, string dependencyName, string previousDependencyVersion, string newDependencyVersion, bool isTransitive, string? resultOutputPath = null)
         | 
| 27 | 
            +
                {
         | 
| 28 | 
            +
                    var result = await RunWithErrorHandlingAsync(repoRootPath, workspacePath, dependencyName, previousDependencyVersion, newDependencyVersion, isTransitive);
         | 
| 29 | 
            +
                    if (resultOutputPath is { })
         | 
| 30 | 
            +
                    {
         | 
| 31 | 
            +
                        await WriteResultFile(result, resultOutputPath, _logger);
         | 
| 32 | 
            +
                    }
         | 
| 33 | 
            +
                }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                // this is a convenient method for tests
         | 
| 36 | 
            +
                internal async Task<UpdateOperationResult> RunWithErrorHandlingAsync(string repoRootPath, string workspacePath, string dependencyName, string previousDependencyVersion, string newDependencyVersion, bool isTransitive)
         | 
| 27 37 | 
             
                {
         | 
| 28 38 | 
             
                    UpdateOperationResult result = new(); // assumed to be ok until proven otherwise
         | 
| 29 39 | 
             
                    try
         | 
| @@ -52,11 +62,16 @@ public class UpdaterWorker | |
| 52 62 | 
             
                            ErrorDetails = ex.FilePath,
         | 
| 53 63 | 
             
                        };
         | 
| 54 64 | 
             
                    }
         | 
| 55 | 
            -
             | 
| 56 | 
            -
                    if (resultOutputPath is { })
         | 
| 65 | 
            +
                    catch (UpdateNotPossibleException ex)
         | 
| 57 66 | 
             
                    {
         | 
| 58 | 
            -
                         | 
| 67 | 
            +
                        result = new()
         | 
| 68 | 
            +
                        {
         | 
| 69 | 
            +
                            ErrorType = ErrorType.UpdateNotPossible,
         | 
| 70 | 
            +
                            ErrorDetails = ex.Dependencies,
         | 
| 71 | 
            +
                        };
         | 
| 59 72 | 
             
                    }
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                    return result;
         | 
| 60 75 | 
             
                }
         | 
| 61 76 |  | 
| 62 77 | 
             
                public async Task<UpdateOperationResult> RunAsync(string repoRootPath, string workspacePath, string dependencyName, string previousDependencyVersion, string newDependencyVersion, bool isTransitive)
         | 
| @@ -833,6 +833,17 @@ internal static partial class MSBuildHelper | |
| 833 833 | 
             
                    }
         | 
| 834 834 | 
             
                }
         | 
| 835 835 |  | 
| 836 | 
            +
                internal static void ThrowOnMissingPackages(string output)
         | 
| 837 | 
            +
                {
         | 
| 838 | 
            +
                    var missingPackagesPattern = new Regex(@"Package '(?<PackageName>[^'].*)' is not found on source");
         | 
| 839 | 
            +
                    var matchCollection = missingPackagesPattern.Matches(output);
         | 
| 840 | 
            +
                    var missingPackages = matchCollection.Select(m => m.Groups["PackageName"].Value).Distinct().ToArray();
         | 
| 841 | 
            +
                    if (missingPackages.Length > 0)
         | 
| 842 | 
            +
                    {
         | 
| 843 | 
            +
                        throw new UpdateNotPossibleException(missingPackages);
         | 
| 844 | 
            +
                    }
         | 
| 845 | 
            +
                }
         | 
| 846 | 
            +
             | 
| 836 847 | 
             
                internal static bool TryGetGlobalJsonPath(string repoRootPath, string workspacePath, [NotNullWhen(returnValue: true)] out string? globalJsonPath)
         | 
| 837 848 | 
             
                {
         | 
| 838 849 | 
             
                    globalJsonPath = PathHelper.GetFileInDirectoryOrParent(workspacePath, repoRootPath, "global.json", caseSensitive: false);
         | 
| @@ -35,10 +35,10 @@ public class AnalyzeWorkerTestBase | |
| 35 35 |  | 
| 36 36 | 
             
                        var discoveryPath = Path.GetFullPath(DiscoveryWorker.DiscoveryResultFileName, directoryPath);
         | 
| 37 37 | 
             
                        var dependencyPath = Path.GetFullPath(relativeDependencyPath, directoryPath);
         | 
| 38 | 
            -
                        var analysisPath = Path.GetFullPath(AnalyzeWorker.AnalysisDirectoryName, directoryPath);
         | 
| 39 38 |  | 
| 40 39 | 
             
                        var worker = new AnalyzeWorker(new Logger(verbose: true));
         | 
| 41 | 
            -
                        await worker. | 
| 40 | 
            +
                        var result = await worker.RunWithErrorHandlingAsync(directoryPath, discoveryPath, dependencyPath);
         | 
| 41 | 
            +
                        return result;
         | 
| 42 42 | 
             
                    });
         | 
| 43 43 |  | 
| 44 44 | 
             
                    ValidateAnalysisResult(expectedResult, actualResult);
         | 
| @@ -78,17 +78,13 @@ public class AnalyzeWorkerTestBase | |
| 78 78 | 
             
                    }
         | 
| 79 79 | 
             
                }
         | 
| 80 80 |  | 
| 81 | 
            -
                protected static async Task<AnalysisResult> RunAnalyzerAsync(string dependencyName, TestFile[] files, Func<string, Task | 
| 81 | 
            +
                protected static async Task<AnalysisResult> RunAnalyzerAsync(string dependencyName, TestFile[] files, Func<string, Task<AnalysisResult>> action)
         | 
| 82 82 | 
             
                {
         | 
| 83 83 | 
             
                    // write initial files
         | 
| 84 84 | 
             
                    using var temporaryDirectory = await TemporaryDirectory.CreateWithContentsAsync(files);
         | 
| 85 85 |  | 
| 86 86 | 
             
                    // run discovery
         | 
| 87 | 
            -
                    await action(temporaryDirectory.DirectoryPath);
         | 
| 88 | 
            -
             | 
| 89 | 
            -
                    // gather results
         | 
| 90 | 
            -
                    var resultPath = Path.Join(temporaryDirectory.DirectoryPath, AnalyzeWorker.AnalysisDirectoryName, $"{dependencyName}.json");
         | 
| 91 | 
            -
                    var resultJson = await File.ReadAllTextAsync(resultPath);
         | 
| 92 | 
            -
                    return JsonSerializer.Deserialize<AnalysisResult>(resultJson, DiscoveryWorker.SerializerOptions)!;
         | 
| 87 | 
            +
                    var result = await action(temporaryDirectory.DirectoryPath);
         | 
| 88 | 
            +
                    return result;
         | 
| 93 89 | 
             
                }
         | 
| 94 90 | 
             
            }
         | 
| @@ -25,7 +25,8 @@ public class DiscoveryWorkerTestBase | |
| 25 25 | 
             
                        await UpdateWorkerTestBase.MockNuGetPackagesInDirectory(packages, directoryPath);
         | 
| 26 26 |  | 
| 27 27 | 
             
                        var worker = new DiscoveryWorker(new Logger(verbose: true));
         | 
| 28 | 
            -
                        await worker. | 
| 28 | 
            +
                        var result = await worker.RunWithErrorHandlingAsync(directoryPath, workspacePath);
         | 
| 29 | 
            +
                        return result;
         | 
| 29 30 | 
             
                    });
         | 
| 30 31 |  | 
| 31 32 | 
             
                    ValidateWorkspaceResult(expectedResult, actualResult);
         | 
| @@ -108,18 +109,14 @@ public class DiscoveryWorkerTestBase | |
| 108 109 | 
             
                    }
         | 
| 109 110 | 
             
                }
         | 
| 110 111 |  | 
| 111 | 
            -
                protected static async Task<WorkspaceDiscoveryResult> RunDiscoveryAsync(TestFile[] files, Func<string, Task | 
| 112 | 
            +
                protected static async Task<WorkspaceDiscoveryResult> RunDiscoveryAsync(TestFile[] files, Func<string, Task<WorkspaceDiscoveryResult>> action)
         | 
| 112 113 | 
             
                {
         | 
| 113 114 | 
             
                    // write initial files
         | 
| 114 115 | 
             
                    using var temporaryDirectory = await TemporaryDirectory.CreateWithContentsAsync(files);
         | 
| 115 116 |  | 
| 116 117 | 
             
                    // run discovery
         | 
| 117 | 
            -
                    await action(temporaryDirectory.DirectoryPath);
         | 
| 118 | 
            -
             | 
| 119 | 
            -
                    // gather results
         | 
| 120 | 
            -
                    var resultPath = Path.Join(temporaryDirectory.DirectoryPath, DiscoveryWorker.DiscoveryResultFileName);
         | 
| 121 | 
            -
                    var resultJson = await File.ReadAllTextAsync(resultPath);
         | 
| 122 | 
            -
                    return JsonSerializer.Deserialize<WorkspaceDiscoveryResult>(resultJson, DiscoveryWorker.SerializerOptions)!;
         | 
| 118 | 
            +
                    var result = await action(temporaryDirectory.DirectoryPath);
         | 
| 119 | 
            +
                    return result;
         | 
| 123 120 | 
             
                }
         | 
| 124 121 |  | 
| 125 122 | 
             
                internal class PropertyComparer : IEqualityComparer<Property>
         | 
| @@ -1,5 +1,3 @@ | |
| 1 | 
            -
            using System.Text.Json;
         | 
| 2 | 
            -
             | 
| 3 1 | 
             
            using NuGetUpdater.Core.Updater;
         | 
| 4 2 |  | 
| 5 3 | 
             
            using Xunit;
         | 
| @@ -137,10 +135,7 @@ public abstract class UpdateWorkerTestBase : TestBase | |
| 137 135 | 
             
                        // run update
         | 
| 138 136 | 
             
                        var worker = new UpdaterWorker(new Logger(verbose: true));
         | 
| 139 137 | 
             
                        var projectPath = placeFilesInSrc ? $"src/{projectFilePath}" : projectFilePath;
         | 
| 140 | 
            -
                        var  | 
| 141 | 
            -
                        await worker.RunAsync(temporaryDirectory, projectPath, dependencyName, oldVersion, newVersion, isTransitive, updateResultFile);
         | 
| 142 | 
            -
                        var actualResultContents = await File.ReadAllTextAsync(updateResultFile);
         | 
| 143 | 
            -
                        var actualResult = JsonSerializer.Deserialize<UpdateOperationResult>(actualResultContents, UpdaterWorker.SerializerOptions);
         | 
| 138 | 
            +
                        var actualResult = await worker.RunWithErrorHandlingAsync(temporaryDirectory, projectPath, dependencyName, oldVersion, newVersion, isTransitive);
         | 
| 144 139 | 
             
                        if (expectedResult is { })
         | 
| 145 140 | 
             
                        {
         | 
| 146 141 | 
             
                            ValidateUpdateOperationResult(expectedResult, actualResult!);
         | 
| @@ -159,7 +154,7 @@ public abstract class UpdateWorkerTestBase : TestBase | |
| 159 154 | 
             
                protected static void ValidateUpdateOperationResult(UpdateOperationResult expectedResult, UpdateOperationResult actualResult)
         | 
| 160 155 | 
             
                {
         | 
| 161 156 | 
             
                    Assert.Equal(expectedResult.ErrorType, actualResult.ErrorType);
         | 
| 162 | 
            -
                    Assert. | 
| 157 | 
            +
                    Assert.Equivalent(expectedResult.ErrorDetails, actualResult.ErrorDetails);
         | 
| 163 158 | 
             
                }
         | 
| 164 159 |  | 
| 165 160 | 
             
                protected static Task TestNoChangeforSolution(
         | 
    
        data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackagesConfig.cs
    CHANGED
    
    | @@ -2106,7 +2106,7 @@ public partial class UpdateWorkerTests | |
| 2106 2106 | 
             
                        var resultContents = await File.ReadAllTextAsync(resultOutputPath);
         | 
| 2107 2107 | 
             
                        var result = JsonSerializer.Deserialize<UpdateOperationResult>(resultContents, UpdaterWorker.SerializerOptions)!;
         | 
| 2108 2108 | 
             
                        Assert.Equal(ErrorType.MissingFile, result.ErrorType);
         | 
| 2109 | 
            -
                        Assert.Equal(Path.Combine(temporaryDirectory.DirectoryPath, "this.file.does.not.exist.targets"), result.ErrorDetails);
         | 
| 2109 | 
            +
                        Assert.Equal(Path.Combine(temporaryDirectory.DirectoryPath, "this.file.does.not.exist.targets"), result.ErrorDetails.ToString());
         | 
| 2110 2110 | 
             
                    }
         | 
| 2111 2111 |  | 
| 2112 2112 | 
             
                    [Fact]
         | 
| @@ -2190,6 +2190,84 @@ public partial class UpdateWorkerTests | |
| 2190 2190 | 
             
                        );
         | 
| 2191 2191 | 
             
                    }
         | 
| 2192 2192 |  | 
| 2193 | 
            +
                    [Fact]
         | 
| 2194 | 
            +
                    public async Task MissingDependencyErrorIsReported()
         | 
| 2195 | 
            +
                    {
         | 
| 2196 | 
            +
                        // trying to update Some.Package from 1.0.1 to 1.0.2, but another package isn't available; update fails
         | 
| 2197 | 
            +
                        await TestUpdateForProject("Some.Package", "1.0.1", "1.0.2",
         | 
| 2198 | 
            +
                            packages:
         | 
| 2199 | 
            +
                            [
         | 
| 2200 | 
            +
                                MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.1", "net45"),
         | 
| 2201 | 
            +
                                MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.2", "net45"),
         | 
| 2202 | 
            +
             | 
| 2203 | 
            +
                                // the package `Unrelated.Package/1.0.0` is missing and will cause the update to fail
         | 
| 2204 | 
            +
                            ],
         | 
| 2205 | 
            +
                            // existing
         | 
| 2206 | 
            +
                            projectContents: """
         | 
| 2207 | 
            +
                                <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
         | 
| 2208 | 
            +
                                  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
         | 
| 2209 | 
            +
                                  <PropertyGroup>
         | 
| 2210 | 
            +
                                    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
         | 
| 2211 | 
            +
                                  </PropertyGroup>
         | 
| 2212 | 
            +
                                  <ItemGroup>
         | 
| 2213 | 
            +
                                    <None Include="packages.config" />
         | 
| 2214 | 
            +
                                  </ItemGroup>
         | 
| 2215 | 
            +
                                  <ItemGroup>
         | 
| 2216 | 
            +
                                    <Reference Include="Some.Package, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed">
         | 
| 2217 | 
            +
                                      <HintPath>packages\Some.Package.1.0.1\lib\net45\Some.Package.dll</HintPath>
         | 
| 2218 | 
            +
                                      <Private>True</Private>
         | 
| 2219 | 
            +
                                    </Reference>
         | 
| 2220 | 
            +
                                    <Reference Include="Unrelated.Package, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed">
         | 
| 2221 | 
            +
                                      <HintPath>packages\Unrelated.Package.1.0.0\lib\net45\Unrelated.Package.dll</HintPath>
         | 
| 2222 | 
            +
                                      <Private>True</Private>
         | 
| 2223 | 
            +
                                    </Reference>
         | 
| 2224 | 
            +
                                  </ItemGroup>
         | 
| 2225 | 
            +
                                  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
         | 
| 2226 | 
            +
                                </Project>
         | 
| 2227 | 
            +
                                """,
         | 
| 2228 | 
            +
                            packagesConfigContents: """
         | 
| 2229 | 
            +
                                <packages>
         | 
| 2230 | 
            +
                                  <package id="Some.Package" version="1.0.1" targetFramework="net45" />
         | 
| 2231 | 
            +
                                  <package id="Unrelated.Package" version="1.0.0" targetFramework="net45" />
         | 
| 2232 | 
            +
                                </packages>
         | 
| 2233 | 
            +
                                """,
         | 
| 2234 | 
            +
                            // expected
         | 
| 2235 | 
            +
                            expectedProjectContents: """
         | 
| 2236 | 
            +
                                <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
         | 
| 2237 | 
            +
                                  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
         | 
| 2238 | 
            +
                                  <PropertyGroup>
         | 
| 2239 | 
            +
                                    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
         | 
| 2240 | 
            +
                                  </PropertyGroup>
         | 
| 2241 | 
            +
                                  <ItemGroup>
         | 
| 2242 | 
            +
                                    <None Include="packages.config" />
         | 
| 2243 | 
            +
                                  </ItemGroup>
         | 
| 2244 | 
            +
                                  <ItemGroup>
         | 
| 2245 | 
            +
                                    <Reference Include="Some.Package, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed">
         | 
| 2246 | 
            +
                                      <HintPath>packages\Some.Package.1.0.1\lib\net45\Some.Package.dll</HintPath>
         | 
| 2247 | 
            +
                                      <Private>True</Private>
         | 
| 2248 | 
            +
                                    </Reference>
         | 
| 2249 | 
            +
                                    <Reference Include="Unrelated.Package, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed">
         | 
| 2250 | 
            +
                                      <HintPath>packages\Unrelated.Package.1.0.0\lib\net45\Unrelated.Package.dll</HintPath>
         | 
| 2251 | 
            +
                                      <Private>True</Private>
         | 
| 2252 | 
            +
                                    </Reference>
         | 
| 2253 | 
            +
                                  </ItemGroup>
         | 
| 2254 | 
            +
                                  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
         | 
| 2255 | 
            +
                                </Project>
         | 
| 2256 | 
            +
                                """,
         | 
| 2257 | 
            +
                            expectedPackagesConfigContents: """
         | 
| 2258 | 
            +
                                <packages>
         | 
| 2259 | 
            +
                                  <package id="Some.Package" version="1.0.1" targetFramework="net45" />
         | 
| 2260 | 
            +
                                  <package id="Unrelated.Package" version="1.0.0" targetFramework="net45" />
         | 
| 2261 | 
            +
                                </packages>
         | 
| 2262 | 
            +
                                """,
         | 
| 2263 | 
            +
                            expectedResult: new()
         | 
| 2264 | 
            +
                            {
         | 
| 2265 | 
            +
                                ErrorType = ErrorType.UpdateNotPossible,
         | 
| 2266 | 
            +
                                ErrorDetails = new[] { "Unrelated.Package.1.0.0" },
         | 
| 2267 | 
            +
                            }
         | 
| 2268 | 
            +
                        );
         | 
| 2269 | 
            +
                    }
         | 
| 2270 | 
            +
             | 
| 2193 2271 | 
             
                    protected static Task TestUpdateForProject(
         | 
| 2194 2272 | 
             
                        string dependencyName,
         | 
| 2195 2273 | 
             
                        string oldVersion,
         | 
| @@ -263,14 +263,16 @@ module Dependabot | |
| 263 263 | 
             
                  sig { params(json: T::Hash[String, T.untyped]).void }
         | 
| 264 264 | 
             
                  def self.ensure_no_errors(json)
         | 
| 265 265 | 
             
                    error_type = T.let(json.fetch("ErrorType", nil), T.nilable(String))
         | 
| 266 | 
            -
                    error_details =  | 
| 266 | 
            +
                    error_details = json.fetch("ErrorDetails", nil)
         | 
| 267 267 | 
             
                    case error_type
         | 
| 268 268 | 
             
                    when "None", nil
         | 
| 269 269 | 
             
                      # no issue
         | 
| 270 270 | 
             
                    when "AuthenticationFailure"
         | 
| 271 | 
            -
                      raise PrivateSourceAuthenticationFailure, error_details
         | 
| 271 | 
            +
                      raise PrivateSourceAuthenticationFailure, T.let(error_details, T.nilable(String))
         | 
| 272 272 | 
             
                    when "MissingFile"
         | 
| 273 | 
            -
                      raise DependencyFileNotFound, error_details
         | 
| 273 | 
            +
                      raise DependencyFileNotFound, T.let(error_details, T.nilable(String))
         | 
| 274 | 
            +
                    when "UpdateNotPossible"
         | 
| 275 | 
            +
                      raise UpdateNotPossible, T.let(error_details, T::Array[String])
         | 
| 274 276 | 
             
                    else
         | 
| 275 277 | 
             
                      raise "Unexpected error type from native tool: #{error_type}: #{error_details}"
         | 
| 276 278 | 
             
                    end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: dependabot-nuget
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.280.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Dependabot
         | 
| 8 | 
            -
            autorequire: | 
| 8 | 
            +
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2024-10- | 
| 11 | 
            +
            date: 2024-10-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: dependabot-common
         | 
| @@ -16,14 +16,14 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - '='
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: 0. | 
| 19 | 
            +
                    version: 0.280.0
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - '='
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: 0. | 
| 26 | 
            +
                    version: 0.280.0
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: rubyzip
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -176,14 +176,14 @@ dependencies: | |
| 176 176 | 
             
                requirements:
         | 
| 177 177 | 
             
                - - "~>"
         | 
| 178 178 | 
             
                  - !ruby/object:Gem::Version
         | 
| 179 | 
            -
                    version: 0.8. | 
| 179 | 
            +
                    version: 0.8.5
         | 
| 180 180 | 
             
              type: :development
         | 
| 181 181 | 
             
              prerelease: false
         | 
| 182 182 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 183 183 | 
             
                requirements:
         | 
| 184 184 | 
             
                - - "~>"
         | 
| 185 185 | 
             
                  - !ruby/object:Gem::Version
         | 
| 186 | 
            -
                    version: 0.8. | 
| 186 | 
            +
                    version: 0.8.5
         | 
| 187 187 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 188 188 | 
             
              name: simplecov
         | 
| 189 189 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -410,11 +410,13 @@ files: | |
| 410 410 | 
             
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/ReportedRequirement.cs
         | 
| 411 411 | 
             
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/RequirementSource.cs
         | 
| 412 412 | 
             
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UnknownError.cs
         | 
| 413 | 
            +
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UpdateNotPossible.cs
         | 
| 413 414 | 
             
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UpdatedDependencyList.cs
         | 
| 414 415 | 
             
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/HttpApiHandler.cs
         | 
| 415 416 | 
             
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/IApiHandler.cs
         | 
| 416 417 | 
             
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunResult.cs
         | 
| 417 418 | 
             
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs
         | 
| 419 | 
            +
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/UpdateNotPossibleException.cs
         | 
| 418 420 | 
             
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/BindingRedirectManager.cs
         | 
| 419 421 | 
             
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/BindingRedirectResolver.cs
         | 
| 420 422 | 
             
            - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/ConfigurationFile.cs
         | 
| @@ -491,8 +493,8 @@ licenses: | |
| 491 493 | 
             
            - MIT
         | 
| 492 494 | 
             
            metadata:
         | 
| 493 495 | 
             
              bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
         | 
| 494 | 
            -
              changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0. | 
| 495 | 
            -
            post_install_message: | 
| 496 | 
            +
              changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.280.0
         | 
| 497 | 
            +
            post_install_message:
         | 
| 496 498 | 
             
            rdoc_options: []
         | 
| 497 499 | 
             
            require_paths:
         | 
| 498 500 | 
             
            - lib
         | 
| @@ -508,7 +510,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 508 510 | 
             
                  version: 3.1.0
         | 
| 509 511 | 
             
            requirements: []
         | 
| 510 512 | 
             
            rubygems_version: 3.5.9
         | 
| 511 | 
            -
            signing_key: | 
| 513 | 
            +
            signing_key:
         | 
| 512 514 | 
             
            specification_version: 4
         | 
| 513 515 | 
             
            summary: Provides Dependabot support for .NET (NuGet)
         | 
| 514 516 | 
             
            test_files: []
         |