dependabot-nuget 0.372.0 → 0.373.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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/lib/NuGetUpdater/Directory.Build.props +1 -0
  3. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/AnalyzeWorker.cs +7 -7
  4. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/DependencyFinder.cs +1 -1
  5. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Dependency.cs +3 -12
  6. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DiscoveryWorker.cs +11 -4
  7. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +1 -1
  8. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Files/PackagesConfigBuildFile.cs +1 -2
  9. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Files/ProjectBuildFile.cs +1 -4
  10. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/IUpdaterWorker.cs +1 -1
  11. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Job.cs +2 -2
  12. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/CreateSecurityUpdatePullRequestHandler.cs +1 -1
  13. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/GroupUpdateAllVersionsHandler.cs +2 -2
  14. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshGroupUpdatePullRequestHandler.cs +1 -1
  15. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshSecurityUpdatePullRequestHandler.cs +1 -1
  16. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshVersionUpdatePullRequestHandler.cs +1 -1
  17. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/FileWriters/FileWriterWorker.cs +2 -2
  18. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/UpdaterWorker.cs +5 -5
  19. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +1 -4
  20. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTestBase.cs +1 -2
  21. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTests.cs +9 -9
  22. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTestBase.cs +4 -5
  23. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.PackagesConfig.cs +2 -2
  24. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Proj.cs +2 -2
  25. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +24 -24
  26. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.cs +31 -33
  27. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/SdkProjectDiscoveryTests.cs +21 -21
  28. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Files/PackagesConfigBuildFileTests.cs +1 -1
  29. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Files/ProjectBuildFileTests.cs +2 -2
  30. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/ApiModel/JobTests.cs +16 -16
  31. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/CreateSecurityUpdatePullRequestHandlerTests.cs +3 -3
  32. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/GroupUpdateAllVersionsHandlerTests.cs +10 -10
  33. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/RefreshGroupUpdatePullRequestHandlerTests.cs +5 -5
  34. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/RefreshSecurityUpdatePullRequestHandlerTests.cs +7 -7
  35. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/RefreshVersionUpdatePullRequestHandlerTests.cs +5 -5
  36. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdatedDependencyListTests.cs +1 -1
  37. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/StringLogger.cs +13 -0
  38. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/TestUpdaterWorker.cs +5 -5
  39. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTestBase.cs +19 -19
  40. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +60 -60
  41. metadata +5 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a058182c9ce909abc8398d444a3cba984f43528a7655fd5ee96cc8c607bbfd76
4
- data.tar.gz: ffd8f02946da91739938e89ca13e3beb4e6b3ef157bb23083251df98cf45930f
3
+ metadata.gz: ed8631b7dbf0b7afe45ac609f37741c2baac7757d164bd02682de074a8dbf9a8
4
+ data.tar.gz: 64b23850d13693a34fd1dbf990839e8aab0d71c4c05c5f100753d25740cd4cb3
5
5
  SHA512:
6
- metadata.gz: 4d9d90b837aa4ebd014a46c1dc0a89ae29689f30bbe84fc49c16deec4c260625e263aa731f100d0ef909ad2da00a48c131e9086393866f54e83e48e6678a77f8
7
- data.tar.gz: d8c27b9ff9c1837c191ce89ae005e3071f5fc5cd09d76d8c1e0ecc3ea1bd511ed1cd544bac6bdd0ea17aef43dc49747b2c87cc8cbe0f3e3645f6977582ec3394
6
+ metadata.gz: 07e2ccca8cbfd5459b93cf3bde39eeed3e9d021fb99e184809a6b925d0699bda70dc5b41245bd32c2cac745aff8d45fc2868cf5989773c9f4dfb0344c6f2f4e5
7
+ data.tar.gz: c983ddf3a66ab1d75ee33de6c4feefee4af2f3f34003e94b4546afa68979ac4c26668c72cf75fda1d2a66cb80365658b018cf14000b037c0ab32ad5124c77dd9
@@ -6,6 +6,7 @@
6
6
  <Nullable>enable</Nullable>
7
7
  <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
8
8
  <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
9
+ <NuGetAudit>false</NuGetAudit>
9
10
  </PropertyGroup>
10
11
 
11
12
  <Import Project="Directory.Common.props" />
@@ -84,7 +84,7 @@ public partial class AnalyzeWorker : IAnalyzeWorker
84
84
  .Select(NuGetFramework.Parse)
85
85
  .ToImmutableArray();
86
86
  var propertyBasedDependencies = discovery.Projects.SelectMany(p
87
- => p.Dependencies.Where(d => !d.IsTransitive &&
87
+ => p.Dependencies.Where(d => d.IsTopLevel &&
88
88
  d.EvaluationResult?.RootPropertyName is not null)
89
89
  ).ToImmutableArray();
90
90
  var dotnetToolsHasDependency = discovery.DotNetToolsJson?.Dependencies.Any(d => d.Name.Equals(dependencyInfo.Name, StringComparison.OrdinalIgnoreCase)) == true;
@@ -149,12 +149,12 @@ public partial class AnalyzeWorker : IAnalyzeWorker
149
149
  else if (dotnetToolsHasDependency)
150
150
  {
151
151
  var infoUrl = await nugetContext.GetPackageInfoUrlAsync(dependencyInfo.Name, updatedVersion.ToNormalizedString(), CancellationToken.None);
152
- updatedDependencies = [new Dependency(dependencyInfo.Name, updatedVersion.ToNormalizedString(), DependencyType.DotNetTool, IsDirect: true, InfoUrl: infoUrl)];
152
+ updatedDependencies = [new Dependency(dependencyInfo.Name, updatedVersion.ToNormalizedString(), DependencyType.DotNetTool, InfoUrl: infoUrl)];
153
153
  }
154
154
  else if (globalJsonHasDependency)
155
155
  {
156
156
  var infoUrl = await nugetContext.GetPackageInfoUrlAsync(dependencyInfo.Name, updatedVersion.ToNormalizedString(), CancellationToken.None);
157
- updatedDependencies = [new Dependency(dependencyInfo.Name, updatedVersion.ToNormalizedString(), DependencyType.MSBuildSdk, IsDirect: true, InfoUrl: infoUrl)];
157
+ updatedDependencies = [new Dependency(dependencyInfo.Name, updatedVersion.ToNormalizedString(), DependencyType.MSBuildSdk, InfoUrl: infoUrl)];
158
158
  }
159
159
  else
160
160
  {
@@ -193,11 +193,11 @@ public partial class AnalyzeWorker : IAnalyzeWorker
193
193
  return true;
194
194
  }
195
195
 
196
- // Since the dependency is not vulnerable, we only need to update if it is not transitive.
196
+ // Since the dependency is not vulnerable, we only need to update if it is a top-level dependency.
197
197
  return projectsWithDependency.Any(p =>
198
198
  p.Dependencies.Any(d =>
199
199
  d.Name.Equals(dependencyInfo.Name, StringComparison.OrdinalIgnoreCase) &&
200
- !d.IsTransitive));
200
+ d.IsTopLevel));
201
201
  }
202
202
 
203
203
  private static Task<WorkspaceDiscoveryResult> DeserializeWorkspaceDiscoveryResultFileAsync(string path)
@@ -392,7 +392,7 @@ public partial class AnalyzeWorker : IAnalyzeWorker
392
392
  // When updating peer dependencies, we only need to consider top-level dependencies.
393
393
  var projectDependencyNames = projectsWithDependency
394
394
  .SelectMany(p => p.Dependencies)
395
- .Where(d => !d.IsTransitive)
395
+ .Where(d => d.IsTopLevel)
396
396
  .Select(d => d.Name)
397
397
  .ToImmutableHashSet(StringComparer.OrdinalIgnoreCase);
398
398
 
@@ -427,7 +427,7 @@ public partial class AnalyzeWorker : IAnalyzeWorker
427
427
  {
428
428
  var packageDeclarationsUsingProperty = discovery.Projects
429
429
  .SelectMany(p =>
430
- p.Dependencies.Where(d => !d.IsTransitive &&
430
+ p.Dependencies.Where(d => d.IsTopLevel &&
431
431
  d.Name.Equals(packageId, StringComparison.OrdinalIgnoreCase) &&
432
432
  d.EvaluationResult?.RootPropertyName is not null)
433
433
  ).ToImmutableArray();
@@ -34,7 +34,7 @@ internal static class DependencyFinder
34
34
  foreach (var dependency in dependencies)
35
35
  {
36
36
  var infoUrl = await nugetContext.GetPackageInfoUrlAsync(dependency.Name, dependency.Version!, cancellationToken);
37
- var updatedDependency = dependency with { IsTransitive = false, InfoUrl = infoUrl };
37
+ var updatedDependency = dependency with { IsTopLevel = true, InfoUrl = infoUrl };
38
38
  updatedDependencies.Add(updatedDependency);
39
39
  }
40
40
 
@@ -10,10 +10,7 @@ public sealed record Dependency(
10
10
  DependencyType Type,
11
11
  EvaluationResult? EvaluationResult = null,
12
12
  ImmutableArray<string>? TargetFrameworks = null,
13
- bool IsDevDependency = false,
14
- bool IsDirect = false,
15
- bool IsTransitive = false,
16
- bool IsOverride = false,
13
+ bool IsTopLevel = true,
17
14
  bool IsUpdate = false,
18
15
  string? InfoUrl = null) : IEquatable<Dependency>
19
16
  {
@@ -34,10 +31,7 @@ public sealed record Dependency(
34
31
  Type == other.Type &&
35
32
  EvaluationResult == other.EvaluationResult &&
36
33
  TargetFrameworks.SequenceEqual(other.TargetFrameworks) &&
37
- IsDevDependency == other.IsDevDependency &&
38
- IsDirect == other.IsDirect &&
39
- IsTransitive == other.IsTransitive &&
40
- IsOverride == other.IsOverride &&
34
+ IsTopLevel == other.IsTopLevel &&
41
35
  IsUpdate == other.IsUpdate &&
42
36
  InfoUrl == other.InfoUrl;
43
37
  }
@@ -50,10 +44,7 @@ public sealed record Dependency(
50
44
  hash.Add(Type);
51
45
  hash.Add(EvaluationResult);
52
46
  hash.Add(TargetFrameworks);
53
- hash.Add(IsDevDependency);
54
- hash.Add(IsDirect);
55
- hash.Add(IsTransitive);
56
- hash.Add(IsOverride);
47
+ hash.Add(IsTopLevel);
57
48
  hash.Add(IsUpdate);
58
49
  hash.Add(InfoUrl);
59
50
  return hash.ToHashCode();
@@ -171,10 +171,11 @@ public partial class DiscoveryWorker : IDiscoveryWorker
171
171
  {
172
172
  _logger.Info($" Discovering projects beneath [{Path.GetRelativePath(repoRootPath, workspacePath)}].");
173
173
  var entryPoints = FindEntryPoints(workspacePath);
174
+ _logger.Info($" Entry points found: {string.Join(", ", entryPoints)}");
174
175
  ImmutableArray<string> projects;
175
176
  try
176
177
  {
177
- projects = await ExpandEntryPointsIntoProjectsAsync(entryPoints, _experimentsManager);
178
+ projects = await ExpandEntryPointsIntoProjectsAsync(entryPoints, _experimentsManager, _logger);
178
179
  }
179
180
  catch (InvalidProjectFileException e)
180
181
  {
@@ -193,7 +194,7 @@ public partial class DiscoveryWorker : IDiscoveryWorker
193
194
  }
194
195
  if (projects.IsEmpty)
195
196
  {
196
- _logger.Info(" No project files found.");
197
+ _logger.Info(" No project files found.");
197
198
  return [];
198
199
  }
199
200
 
@@ -222,7 +223,7 @@ public partial class DiscoveryWorker : IDiscoveryWorker
222
223
  .ToImmutableArray();
223
224
  }
224
225
 
225
- internal async static Task<ImmutableArray<string>> ExpandEntryPointsIntoProjectsAsync(IEnumerable<string> entryPoints, ExperimentsManager experimentsManager)
226
+ internal async static Task<ImmutableArray<string>> ExpandEntryPointsIntoProjectsAsync(IEnumerable<string> entryPoints, ExperimentsManager experimentsManager, ILogger logger)
226
227
  {
227
228
  HashSet<string> expandedProjects = new(PathComparer.Instance);
228
229
  HashSet<string> seenProjects = new(PathComparer.Instance);
@@ -235,28 +236,34 @@ public partial class DiscoveryWorker : IDiscoveryWorker
235
236
  string extension = Path.GetExtension(candidateEntryPoint).ToLowerInvariant();
236
237
  if (extension == ".sln")
237
238
  {
239
+ logger.Info($" Expanding solution: {candidateEntryPoint}:");
238
240
  SolutionFile solution = SolutionFile.Parse(candidateEntryPoint);
239
241
  foreach (ProjectInSolution project in solution.ProjectsInOrder)
240
242
  {
243
+ logger.Info($" Expanded project: {project.AbsolutePath}");
241
244
  filesToExpand.Push(project.AbsolutePath);
242
245
  }
243
246
  }
244
247
  else if (extension == ".slnx")
245
248
  {
249
+ logger.Info($" Expanding solution: {candidateEntryPoint}:");
246
250
  SolutionModel solution = await SolutionSerializers.SlnXml.OpenAsync(candidateEntryPoint, CancellationToken.None);
247
251
  string solutionPath = Path.GetDirectoryName(candidateEntryPoint) ?? string.Empty;
248
252
 
249
253
  foreach (SolutionProjectModel project in solution.SolutionProjects)
250
254
  {
251
255
  string projectPath = Path.Combine(solutionPath, project.FilePath);
256
+ logger.Info($" Expanded project: {projectPath}");
252
257
  filesToExpand.Push(projectPath);
253
258
  }
254
259
  }
255
260
  else if (extension == ".proj")
256
261
  {
262
+ logger.Info($" Expanding file: {candidateEntryPoint}:");
257
263
  var foundProjects = ExpandItemGroupFilesFromProject(candidateEntryPoint, "ProjectFile", "ProjectReference");
258
264
  foreach (var foundProject in foundProjects)
259
265
  {
266
+ logger.Info($" Expanded project: {foundProject}");
260
267
  filesToExpand.Push(foundProject);
261
268
  }
262
269
  }
@@ -337,7 +344,7 @@ public partial class DiscoveryWorker : IDiscoveryWorker
337
344
  try
338
345
  {
339
346
  // get all packages.config results first
340
- var expandedProjects = await ExpandEntryPointsIntoProjectsAsync(normalizedProjectPaths, _experimentsManager);
347
+ var expandedProjects = await ExpandEntryPointsIntoProjectsAsync(normalizedProjectPaths, _experimentsManager, _logger);
341
348
  foreach (var expandedProject in expandedProjects)
342
349
  {
343
350
  var packagesConfigResult = await PackagesConfigDiscovery.Discover(repoRootPath, workspacePath, expandedProject, _logger);
@@ -621,7 +621,7 @@ internal static class SdkProjectDiscovery
621
621
  }
622
622
 
623
623
  var normalizedTfms = combinedTfms.OrderBy(t => t).ToImmutableArray();
624
- groupedDependencies[package.Key] = new Dependency(packageName, packageVersion, dependencyType, TargetFrameworks: normalizedTfms, IsDirect: isTopLevel, IsTransitive: !isTopLevel);
624
+ groupedDependencies[package.Key] = new Dependency(packageName, packageVersion, dependencyType, TargetFrameworks: normalizedTfms, IsTopLevel: isTopLevel);
625
625
  }
626
626
  }
627
627
 
@@ -26,6 +26,5 @@ internal sealed class PackagesConfigBuildFile : XmlBuildFile
26
26
  .Select(p => new Dependency(
27
27
  p.GetAttributeValue("id", StringComparison.OrdinalIgnoreCase),
28
28
  p.GetAttributeValue("version", StringComparison.OrdinalIgnoreCase),
29
- DependencyType.PackagesConfig,
30
- IsDevDependency: (p.GetAttribute("developmentDependency", StringComparison.OrdinalIgnoreCase)?.Value ?? "false").Equals(true.ToString(), StringComparison.OrdinalIgnoreCase)));
29
+ DependencyType.PackagesConfig));
31
30
  }
@@ -108,12 +108,10 @@ internal sealed class ProjectBuildFile : XmlBuildFile
108
108
  return null;
109
109
  }
110
110
 
111
- var isVersionOverride = false;
112
111
  var version = element.GetAttributeOrSubElementValue("Version", StringComparison.OrdinalIgnoreCase);
113
112
  if (version is null)
114
113
  {
115
114
  version = element.GetAttributeOrSubElementValue("VersionOverride", StringComparison.OrdinalIgnoreCase);
116
- isVersionOverride = version is not null;
117
115
  }
118
116
 
119
117
  dependencies.AddRange(
@@ -122,8 +120,7 @@ internal sealed class ProjectBuildFile : XmlBuildFile
122
120
  Name: dep.Trim(),
123
121
  Version: string.IsNullOrEmpty(version) ? null : version,
124
122
  Type: GetDependencyType(element.Name),
125
- IsUpdate: isUpdate,
126
- IsOverride: isVersionOverride))
123
+ IsUpdate: isUpdate))
127
124
  );
128
125
 
129
126
 
@@ -5,5 +5,5 @@ namespace NuGetUpdater.Core;
5
5
 
6
6
  public interface IUpdaterWorker
7
7
  {
8
- Task<UpdateOperationResult> RunAsync(string repoRootPath, string workspacePath, string dependencyName, string previousDependencyVersion, string newDependencyVersion, bool isTransitive);
8
+ Task<UpdateOperationResult> RunAsync(string repoRootPath, string workspacePath, string dependencyName, string previousDependencyVersion, string newDependencyVersion, bool isTopLevel);
9
9
  }
@@ -210,8 +210,8 @@ public sealed record Job
210
210
  return true;
211
211
  }
212
212
 
213
- // ...no specific update being performed, do it if it's not transitive
214
- return !dependency.IsTransitive;
213
+ // ...no specific update being performed, do it if it's a top-level dependency
214
+ return dependency.IsTopLevel;
215
215
  }
216
216
  }
217
217
 
@@ -111,7 +111,7 @@ internal class CreateSecurityUpdatePullRequestHandler : IUpdateHandler
111
111
 
112
112
  logger.Info($"Attempting update of {dependency.Name} from {dependency.Version} to {analysisResult.UpdatedVersion} for {projectPath}.");
113
113
  var projectDiscovery = discoveryResult.GetProjectDiscoveryFromPath(projectPath);
114
- var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTransitive);
114
+ var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTopLevel);
115
115
  if (updaterResult.Error is not null)
116
116
  {
117
117
  logger.Error($"Error updating {dependency.Name} in {projectPath}: {updaterResult.Error.GetReport()}");
@@ -117,7 +117,7 @@ internal class GroupUpdateAllVersionsHandler : IUpdateHandler
117
117
  }
118
118
 
119
119
  var projectDiscovery = discoveryResult.GetProjectDiscoveryFromPath(projectPath);
120
- var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTransitive);
120
+ var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTopLevel);
121
121
  if (updaterResult.Error is not null)
122
122
  {
123
123
  logger.Error($"Error updating {dependency.Name} in {projectPath}: {updaterResult.Error.GetReport()}");
@@ -236,7 +236,7 @@ internal class GroupUpdateAllVersionsHandler : IUpdateHandler
236
236
  }
237
237
 
238
238
  var projectDiscovery = discoveryResult.GetProjectDiscoveryFromPath(projectPath);
239
- var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTransitive);
239
+ var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTopLevel);
240
240
  if (updaterResult.Error is not null)
241
241
  {
242
242
  await apiHandler.RecordUpdateJobError(updaterResult.Error, logger);
@@ -117,7 +117,7 @@ internal class RefreshGroupUpdatePullRequestHandler : IUpdateHandler
117
117
 
118
118
  logger.Info($"Attempting update of {dependency.Name} from {dependency.Version} to {analysisResult.UpdatedVersion} for {projectPath}.");
119
119
  var projectDiscovery = discoveryResult.GetProjectDiscoveryFromPath(projectPath);
120
- var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTransitive);
120
+ var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTopLevel);
121
121
  if (updaterResult.Error is not null)
122
122
  {
123
123
  logger.Error($"Error updating {dependency.Name} in {projectPath}: {updaterResult.Error.GetReport()}");
@@ -112,7 +112,7 @@ internal class RefreshSecurityUpdatePullRequestHandler : IUpdateHandler
112
112
 
113
113
  logger.Info($"Attempting update of {dependency.Name} from {dependency.Version} to {analysisResult.UpdatedVersion} for {projectPath}.");
114
114
  var projectDiscovery = discoveryResult.GetProjectDiscoveryFromPath(projectPath);
115
- var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTransitive);
115
+ var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTopLevel);
116
116
  if (updaterResult.Error is not null)
117
117
  {
118
118
  logger.Error($"Error updating {dependency.Name} in {projectPath}: {updaterResult.Error.GetReport()}");
@@ -102,7 +102,7 @@ internal class RefreshVersionUpdatePullRequestHandler : IUpdateHandler
102
102
 
103
103
  logger.Info($"Attempting update of {dependency.Name} from {dependency.Version} to {analysisResult.UpdatedVersion} for {projectPath}.");
104
104
  var projectDiscovery = discoveryResult.GetProjectDiscoveryFromPath(projectPath);
105
- var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTransitive);
105
+ var updaterResult = await updaterWorker.RunAsync(repoContentsPath.FullName, projectPath, dependency.Name, dependency.Version!, analysisResult.UpdatedVersion, dependency.IsTopLevel);
106
106
  if (updaterResult.Error is not null)
107
107
  {
108
108
  logger.Error($"Error updating {dependency.Name} in {projectPath}: {updaterResult.Error.GetReport()}");
@@ -167,7 +167,7 @@ public class FileWriterWorker
167
167
  }
168
168
 
169
169
  var initialTopLevelDependencies = initialProjectDiscovery.Dependencies
170
- .Where(d => !d.IsTransitive)
170
+ .Where(d => d.IsTopLevel)
171
171
  .ToImmutableArray();
172
172
  var newDependency = new Dependency(dependencyName, newDependencyVersion.ToString(), DependencyType.Unknown);
173
173
  var desiredDependencies = initialTopLevelDependencies.Any(d => d.Name.Equals(dependencyName, StringComparison.OrdinalIgnoreCase))
@@ -243,7 +243,7 @@ public class FileWriterWorker
243
243
  }
244
244
 
245
245
  var rerunTopLevelDependencies = rerunProjectDiscovery.Dependencies
246
- .Where(d => !d.IsTransitive)
246
+ .Where(d => d.IsTopLevel)
247
247
  .ToImmutableArray();
248
248
  var rerunDesiredDependencies = rerunTopLevelDependencies.Any(d => d.Name.Equals(dependencyName, StringComparison.OrdinalIgnoreCase))
249
249
  ? rerunTopLevelDependencies.Select(d => d.Name.Equals(dependencyName, StringComparison.OrdinalIgnoreCase) ? newDependency : d).ToImmutableArray()
@@ -32,9 +32,9 @@ public class UpdaterWorker : IUpdaterWorker
32
32
  _logger = logger;
33
33
  }
34
34
 
35
- public async Task RunAsync(string repoRootPath, string workspacePath, string dependencyName, string previousDependencyVersion, string newDependencyVersion, bool isTransitive, string? resultOutputPath = null)
35
+ public async Task RunAsync(string repoRootPath, string workspacePath, string dependencyName, string previousDependencyVersion, string newDependencyVersion, bool isTopLevel, string? resultOutputPath = null)
36
36
  {
37
- var result = await RunWithErrorHandlingAsync(repoRootPath, workspacePath, dependencyName, previousDependencyVersion, newDependencyVersion, isTransitive);
37
+ var result = await RunWithErrorHandlingAsync(repoRootPath, workspacePath, dependencyName, previousDependencyVersion, newDependencyVersion, isTopLevel);
38
38
  if (resultOutputPath is { })
39
39
  {
40
40
  await WriteResultFile(result, resultOutputPath, _logger);
@@ -42,11 +42,11 @@ public class UpdaterWorker : IUpdaterWorker
42
42
  }
43
43
 
44
44
  // this is a convenient method for tests
45
- internal async Task<UpdateOperationResult> RunWithErrorHandlingAsync(string repoRootPath, string workspacePath, string dependencyName, string previousDependencyVersion, string newDependencyVersion, bool isTransitive)
45
+ internal async Task<UpdateOperationResult> RunWithErrorHandlingAsync(string repoRootPath, string workspacePath, string dependencyName, string previousDependencyVersion, string newDependencyVersion, bool isTopLevel)
46
46
  {
47
47
  try
48
48
  {
49
- var result = await RunAsync(repoRootPath, workspacePath, dependencyName, previousDependencyVersion, newDependencyVersion, isTransitive);
49
+ var result = await RunAsync(repoRootPath, workspacePath, dependencyName, previousDependencyVersion, newDependencyVersion, isTopLevel);
50
50
  return result;
51
51
  }
52
52
  catch (Exception ex)
@@ -66,7 +66,7 @@ public class UpdaterWorker : IUpdaterWorker
66
66
  }
67
67
  }
68
68
 
69
- public async Task<UpdateOperationResult> RunAsync(string repoRootPath, string workspacePath, string dependencyName, string previousDependencyVersion, string newDependencyVersion, bool isTransitive)
69
+ public async Task<UpdateOperationResult> RunAsync(string repoRootPath, string workspacePath, string dependencyName, string previousDependencyVersion, string newDependencyVersion, bool isTopLevel)
70
70
  {
71
71
  MSBuildHelper.RegisterMSBuild(Environment.CurrentDirectory, repoRootPath, _logger);
72
72
 
@@ -197,10 +197,7 @@ internal static partial class MSBuildHelper
197
197
  DependencyType.Unknown,
198
198
  null,
199
199
  null,
200
- false,
201
- false,
202
- false,
203
- false,
200
+ true,
204
201
  false
205
202
  ))
206
203
  .ToList();
@@ -73,8 +73,7 @@ public class AnalyzeWorkerTestBase : TestBase
73
73
  Assert.Equal(expectedDependency.Version, actualDependency.Version);
74
74
  Assert.Equal(expectedDependency.Type, actualDependency.Type);
75
75
  AssertEx.Equal(expectedDependency.TargetFrameworks, actualDependency.TargetFrameworks);
76
- Assert.Equal(expectedDependency.IsDirect, actualDependency.IsDirect);
77
- Assert.Equal(expectedDependency.IsTransitive, actualDependency.IsTransitive);
76
+ Assert.Equal(expectedDependency.IsTopLevel, actualDependency.IsTopLevel);
78
77
  Assert.Equal(expectedDependency.InfoUrl, actualDependency.InfoUrl);
79
78
  }
80
79
  }
@@ -53,7 +53,7 @@ public partial class AnalyzeWorkerTests : AnalyzeWorkerTestBase
53
53
  CanUpdate = true,
54
54
  VersionComesFromMultiDependencyProperty = false,
55
55
  UpdatedDependencies = [
56
- new("Some.Package", "1.1.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect : true),
56
+ new("Some.Package", "1.1.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"]),
57
57
  ],
58
58
  }
59
59
  );
@@ -104,7 +104,7 @@ public partial class AnalyzeWorkerTests : AnalyzeWorkerTestBase
104
104
  CanUpdate = true,
105
105
  VersionComesFromMultiDependencyProperty = false,
106
106
  UpdatedDependencies = [
107
- new("Some.Package", "4.9.2", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
107
+ new("Some.Package", "4.9.2", DependencyType.PackageReference, TargetFrameworks: ["net8.0"]),
108
108
  new("Some.Transitive.Dependency", "4.9.2", DependencyType.Unknown, TargetFrameworks: ["net8.0"]),
109
109
  ],
110
110
  }
@@ -362,7 +362,7 @@ public partial class AnalyzeWorkerTests : AnalyzeWorkerTestBase
362
362
  UpdatedVersion = "1.1.0",
363
363
  CanUpdate = true,
364
364
  UpdatedDependencies = [
365
- new("Some.Package", "1.1.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
365
+ new("Some.Package", "1.1.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"]),
366
366
  ],
367
367
  }
368
368
  );
@@ -409,7 +409,7 @@ public partial class AnalyzeWorkerTests : AnalyzeWorkerTestBase
409
409
  CanUpdate = true,
410
410
  VersionComesFromMultiDependencyProperty = false,
411
411
  UpdatedDependencies = [
412
- new("Some.Package", "1.1.0", DependencyType.PackageReference, TargetFrameworks :["net8.0"], IsDirect : true),
412
+ new("Some.Package", "1.1.0", DependencyType.PackageReference, TargetFrameworks :["net8.0"]),
413
413
  ],
414
414
  }
415
415
  );
@@ -464,7 +464,7 @@ public partial class AnalyzeWorkerTests : AnalyzeWorkerTestBase
464
464
  CanUpdate = true,
465
465
  VersionComesFromMultiDependencyProperty = false,
466
466
  UpdatedDependencies = [
467
- new("Some.Package", "1.1.0", DependencyType.PackageReference, TargetFrameworks :["net8.0"], IsDirect : true),
467
+ new("Some.Package", "1.1.0", DependencyType.PackageReference, TargetFrameworks :["net8.0"]),
468
468
  ],
469
469
  }
470
470
  );
@@ -517,7 +517,7 @@ public partial class AnalyzeWorkerTests : AnalyzeWorkerTestBase
517
517
  CanUpdate = true,
518
518
  VersionComesFromMultiDependencyProperty = false,
519
519
  UpdatedDependencies = [
520
- new("Some.Package", "1.0.1", DependencyType.PackageReference, TargetFrameworks: ["net9.0-windows"], IsDirect: true),
520
+ new("Some.Package", "1.0.1", DependencyType.PackageReference, TargetFrameworks: ["net9.0-windows"]),
521
521
  ],
522
522
  }
523
523
  );
@@ -739,7 +739,7 @@ public partial class AnalyzeWorkerTests : AnalyzeWorkerTestBase
739
739
  VersionComesFromMultiDependencyProperty = false,
740
740
  UpdatedDependencies =
741
741
  [
742
- new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks :["net8.0"], IsDirect : true),
742
+ new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks :["net8.0"]),
743
743
  ],
744
744
  }
745
745
  );
@@ -937,7 +937,7 @@ public partial class AnalyzeWorkerTests : AnalyzeWorkerTestBase
937
937
  VersionComesFromMultiDependencyProperty = false,
938
938
  UpdatedDependencies =
939
939
  [
940
- new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks :["net8.0"], IsDirect : true),
940
+ new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks :["net8.0"]),
941
941
  ],
942
942
  }
943
943
  );
@@ -1125,7 +1125,7 @@ public partial class AnalyzeWorkerTests : AnalyzeWorkerTestBase
1125
1125
  VersionComesFromMultiDependencyProperty = false,
1126
1126
  UpdatedDependencies =
1127
1127
  [
1128
- new("Some.Package", "1.1.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
1128
+ new("Some.Package", "1.1.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"]),
1129
1129
  ],
1130
1130
  }
1131
1131
  );
@@ -28,7 +28,8 @@ public class DiscoveryWorkerTestBase : TestBase
28
28
  await UpdateWorkerTestBase.MockNuGetPackagesInDirectory(packages, directoryPath, includeCommonPackages: includeCommonPackages);
29
29
 
30
30
  repoContentsPath ??= directoryPath;
31
- var worker = new DiscoveryWorker("TEST-JOB-ID", experimentsManager, new TestLogger());
31
+ var logger = new StringLogger();
32
+ var worker = new DiscoveryWorker("TEST-JOB-ID", experimentsManager, logger);
32
33
  var result = await worker.RunWithErrorHandlingAsync(repoContentsPath, workspacePath);
33
34
  return result;
34
35
  });
@@ -123,8 +124,7 @@ public class DiscoveryWorkerTestBase : TestBase
123
124
  return d.Name == expectedDependency.Name
124
125
  && d.Type == expectedDependency.Type
125
126
  && d.Version == expectedDependency.Version
126
- && d.IsDirect == expectedDependency.IsDirect
127
- && d.IsTransitive == expectedDependency.IsTransitive
127
+ && d.IsTopLevel == expectedDependency.IsTopLevel
128
128
  && d.TargetFrameworks.SequenceEqual(expectedDependency.TargetFrameworks);
129
129
  }).ToArray();
130
130
  Assert.True(matchingDependencies.Length == 1, $"""
@@ -132,8 +132,7 @@ public class DiscoveryWorkerTestBase : TestBase
132
132
  Name: {expectedDependency.Name}
133
133
  Type: {expectedDependency.Type}
134
134
  Version: {expectedDependency.Version}
135
- IsDirect: {expectedDependency.IsDirect}
136
- IsTransitive: {expectedDependency.IsTransitive}
135
+ IsTopLevel: {expectedDependency.IsTopLevel}
137
136
  TargetFrameworks: {string.Join(", ", expectedDependency.TargetFrameworks ?? [])}
138
137
  Found:{"\n\t"}{string.Join("\n\t", actualDependencies)}
139
138
  """);
@@ -97,7 +97,7 @@ public partial class DiscoveryWorkerTests
97
97
  TargetFrameworks = ["net46"],
98
98
  Dependencies = [
99
99
  new("Package.A", "1.0.0", DependencyType.PackagesConfig, TargetFrameworks: ["net46"]),
100
- new("Package.B", "2.0.0", DependencyType.PackageReference, IsDirect: true, TargetFrameworks: ["net46"]),
100
+ new("Package.B", "2.0.0", DependencyType.PackageReference, TargetFrameworks: ["net46"]),
101
101
  ],
102
102
  ReferencedProjectPaths = [],
103
103
  ImportedFiles = [],
@@ -186,7 +186,7 @@ public partial class DiscoveryWorkerTests
186
186
  TargetFrameworks = ["net48"],
187
187
  Dependencies = [
188
188
  new("PackageReferencedThroughLegacyMechanism", "1.0.0", DependencyType.PackagesConfig, TargetFrameworks: ["net48"]),
189
- new("PackageReferencedThroughCPMMechanism", "2.0.0", DependencyType.PackageReference, TargetFrameworks: ["net48"], IsDirect: true),
189
+ new("PackageReferencedThroughCPMMechanism", "2.0.0", DependencyType.PackageReference, TargetFrameworks: ["net48"]),
190
190
  ],
191
191
  ReferencedProjectPaths = [],
192
192
  ImportedFiles = [
@@ -66,7 +66,7 @@ public partial class DiscoveryWorkerTests
66
66
  FilePath = "../src/project1/project1.csproj",
67
67
  Dependencies =
68
68
  [
69
- new("Package.A", "1.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
69
+ new("Package.A", "1.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"]),
70
70
  ],
71
71
  TargetFrameworks = ["net8.0"],
72
72
  ReferencedProjectPaths = [],
@@ -78,7 +78,7 @@ public partial class DiscoveryWorkerTests
78
78
  FilePath = "../src/project2/project2.csproj",
79
79
  Dependencies =
80
80
  [
81
- new("Package.B", "2.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
81
+ new("Package.B", "2.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"]),
82
82
  ],
83
83
  TargetFrameworks = ["net8.0"],
84
84
  ReferencedProjectPaths = [],