Skip to content

Commit 44523a4

Browse files
authored
Add ability to disable the writing of the dependency graph spec file (#7239)
1 parent 9f5248f commit 44523a4

14 files changed

Lines changed: 219 additions & 3 deletions

File tree

src/NuGet.Core/NuGet.Build.Tasks.Console/MSBuildStaticGraphRestore.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,7 @@ private PackageSpec GetPackageSpec(IMSBuildProject project, IReadOnlyDictionary<
10831083
restoreMetadata.UsingMicrosoftNETSdk = MSBuildRestoreUtility.GetUsingMicrosoftNETSdk(project.GetProperty("UsingMicrosoftNETSdk"));
10841084
restoreMetadata.SdkAnalysisLevel = MSBuildRestoreUtility.GetSdkAnalysisLevel(project.GetProperty("SdkAnalysisLevel"));
10851085
restoreMetadata.UseLegacyDependencyResolver = project.IsPropertyTrue("RestoreUseLegacyDependencyResolver");
1086+
restoreMetadata.RestoreDoNotWriteDependencyGraphSpec = project.IsPropertyTrue("RestoreDoNotWriteDependencyGraphSpec");
10861087

10871088
return (restoreMetadata, targetFrameworkInfos);
10881089

src/NuGet.Core/NuGet.Build.Tasks/NuGet.targets

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -961,6 +961,7 @@ Copyright (c) .NET Foundation. All rights reserved.
961961
<UsingMicrosoftNETSdk>$(UsingMicrosoftNETSdk)</UsingMicrosoftNETSdk>
962962
<NETCoreSdkVersion>$(NETCoreSdkVersion)</NETCoreSdkVersion>
963963
<RestoreUseLegacyDependencyResolver>$(RestoreUseLegacyDependencyResolver)</RestoreUseLegacyDependencyResolver>
964+
<RestoreDoNotWriteDependencyGraphSpec>$(RestoreDoNotWriteDependencyGraphSpec)</RestoreDoNotWriteDependencyGraphSpec>
964965
</_RestoreGraphEntry>
965966
</ItemGroup>
966967

src/NuGet.Core/NuGet.Commands/RestoreCommand/RestoreCommand.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,8 @@ public async Task<RestoreResult> ExecuteAsync(CancellationToken token)
344344
restoreTime.Elapsed)
345345
{
346346
AuditRan = auditRan,
347-
DidDGHashChange = !noOpCacheFileEvaluation
347+
DidDGHashChange = !noOpCacheFileEvaluation,
348+
DoNotWriteDependencyGraphSpec = _request.Project.RestoreMetadata.RestoreDoNotWriteDependencyGraphSpec
348349
};
349350

350351
telemetry.TelemetryEvent[UpdatedAssetsFile] = restoreResult._isAssetsFileDirty.Value;

src/NuGet.Core/NuGet.Commands/RestoreCommand/RestoreResult.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ public class RestoreResult : IRestoreResult
9292
/// </summary>
9393
internal bool DidDGHashChange { get; init; }
9494

95+
/// <summary>
96+
/// If true, the dg spec file should not be written to disk.
97+
/// </summary>
98+
internal bool DoNotWriteDependencyGraphSpec { get; init; }
9599

96100
private readonly string _dependencyGraphSpecFilePath;
97101

@@ -317,7 +321,7 @@ await FileUtility.ReplaceWithLock(
317321

318322
private async Task CommitDgSpecFileAsync(ILogger log, bool toolCommit)
319323
{
320-
if (!toolCommit && _dependencyGraphSpecFilePath != null && _dependencyGraphSpec != null && (DidDGHashChange || !File.Exists(_dependencyGraphSpecFilePath)))
324+
if (!toolCommit && !DoNotWriteDependencyGraphSpec && _dependencyGraphSpecFilePath != null && _dependencyGraphSpec != null && (DidDGHashChange || !File.Exists(_dependencyGraphSpecFilePath)))
321325
{
322326
log.LogVerbose($"Persisting dg to {_dependencyGraphSpecFilePath}");
323327

src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/MSBuildRestoreUtility.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ public static PackageSpec GetPackageSpec(IEnumerable<IMSBuildItem> items)
293293
result.RestoreMetadata.UsingMicrosoftNETSdk = GetUsingMicrosoftNETSdk(specItem.GetProperty("UsingMicrosoftNETSdk"));
294294
result.RestoreMetadata.SdkAnalysisLevel = GetSdkAnalysisLevel(specItem.GetProperty("SdkAnalysisLevel"));
295295
result.RestoreMetadata.UseLegacyDependencyResolver = IsPropertyTrue(specItem, "RestoreUseLegacyDependencyResolver");
296+
result.RestoreMetadata.RestoreDoNotWriteDependencyGraphSpec = IsPropertyTrue(specItem, "RestoreDoNotWriteDependencyGraphSpec");
296297
result.RestoreSettings.SdkVersion = GetSdkAnalysisLevel(specItem.GetProperty("NETCoreSdkVersion"));
297298
}
298299

src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/PackageSpecFactory.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ private static (ProjectRestoreMetadata? RestoreMetadata, List<TargetFrameworkInf
182182
restoreMetadata.UsingMicrosoftNETSdk = MSBuildRestoreUtility.GetUsingMicrosoftNETSdk(outerBuild.GetProperty("UsingMicrosoftNETSdk"));
183183
restoreMetadata.SdkAnalysisLevel = MSBuildRestoreUtility.GetSdkAnalysisLevel(outerBuild.GetProperty("SdkAnalysisLevel"));
184184
restoreMetadata.UseLegacyDependencyResolver = outerBuild.IsPropertyTrue("RestoreUseLegacyDependencyResolver");
185+
restoreMetadata.RestoreDoNotWriteDependencyGraphSpec = outerBuild.IsPropertyTrue("RestoreDoNotWriteDependencyGraphSpec");
185186

186187
return (restoreMetadata, targetFrameworkInfos);
187188

src/NuGet.Core/NuGet.ProjectModel/JsonPackageSpecReader.Utf8JsonStreamReader.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public partial class JsonPackageSpecReader
9595
private static readonly byte[] SdkAnalysisLevel = Encoding.UTF8.GetBytes("SdkAnalysisLevel");
9696
private static readonly byte[] UsingMicrosoftNETSdk = Encoding.UTF8.GetBytes("UsingMicrosoftNETSdk");
9797
private static readonly byte[] UseLegacyDependencyResolverPropertyName = Encoding.UTF8.GetBytes("restoreUseLegacyDependencyResolver");
98+
private static readonly byte[] RestoreDoNotWriteDependencyGraphSpecPropertyName = Encoding.UTF8.GetBytes("restoreDoNotWriteDependencyGraphSpec");
9899
private static readonly byte[] PackagesToPrunePropertyName = Encoding.UTF8.GetBytes("packagesToPrune");
99100

100101
internal static PackageSpec GetPackageSpecUtf8JsonStreamReader(Stream stream, string name, string packageSpecPath, IEnvironmentVariableReader environmentVariableReader, string snapshotValue = null)
@@ -775,6 +776,7 @@ private static void ReadMSBuildMetadata(ref Utf8JsonStreamReader jsonReader, Pac
775776
bool usingMicrosoftNetSdk = true;
776777
NuGetVersion sdkAnalysisLevel = null;
777778
bool useLegacyDependencyResolver = false;
779+
bool restoreDoNotWriteDependencyGraphSpec = false;
778780

779781
if (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.StartObject)
780782
{
@@ -1033,6 +1035,10 @@ private static void ReadMSBuildMetadata(ref Utf8JsonStreamReader jsonReader, Pac
10331035
{
10341036
useLegacyDependencyResolver = jsonReader.ReadNextTokenAsBoolOrThrowAnException(UseLegacyDependencyResolverPropertyName, Strings.Invalid_AttributeValue);
10351037
}
1038+
else if (jsonReader.ValueTextEquals(RestoreDoNotWriteDependencyGraphSpecPropertyName))
1039+
{
1040+
restoreDoNotWriteDependencyGraphSpec = jsonReader.ReadNextTokenAsBoolOrThrowAnException(RestoreDoNotWriteDependencyGraphSpecPropertyName, Strings.Invalid_AttributeValue);
1041+
}
10361042
else
10371043
{
10381044
jsonReader.Skip();
@@ -1061,6 +1067,7 @@ private static void ReadMSBuildMetadata(ref Utf8JsonStreamReader jsonReader, Pac
10611067
msbuildMetadata.SdkAnalysisLevel = sdkAnalysisLevel;
10621068
msbuildMetadata.UsingMicrosoftNETSdk = usingMicrosoftNetSdk;
10631069
msbuildMetadata.UseLegacyDependencyResolver = useLegacyDependencyResolver;
1070+
msbuildMetadata.RestoreDoNotWriteDependencyGraphSpec = restoreDoNotWriteDependencyGraphSpec;
10641071

10651072
if (configFilePaths != null)
10661073
{

src/NuGet.Core/NuGet.ProjectModel/PackageSpecWriter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ private static void WriteMetadataBooleans(IObjectWriter writer, ProjectRestoreMe
171171
SetValueIfTrue(writer, "CentralPackageTransitivePinningEnabled", msbuildMetadata.CentralPackageTransitivePinningEnabled);
172172
SetValueIfFalse(writer, "UsingMicrosoftNETSdk", msbuildMetadata.UsingMicrosoftNETSdk);
173173
SetValueIfTrue(writer, "restoreUseLegacyDependencyResolver", msbuildMetadata.UseLegacyDependencyResolver);
174+
SetValueIfTrue(writer, "restoreDoNotWriteDependencyGraphSpec", msbuildMetadata.RestoreDoNotWriteDependencyGraphSpec);
174175
}
175176

176177

src/NuGet.Core/NuGet.ProjectModel/ProjectRestoreMetadata.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ public class ProjectRestoreMetadata : IEquatable<ProjectRestoreMetadata>
149149

150150
public bool UseLegacyDependencyResolver { get; set; }
151151

152+
/// <summary>
153+
/// Gets or sets a value indicating whether or not the dependency graph spec file should not be written during restore.
154+
/// The default value is <see langword="false" />.
155+
/// </summary>
156+
public bool RestoreDoNotWriteDependencyGraphSpec { get; set; }
157+
152158
public override int GetHashCode()
153159
{
154160
StringComparer osStringComparer = PathUtility.GetStringComparerBasedOnOS();
@@ -182,6 +188,7 @@ public override int GetHashCode()
182188
hashCode.AddObject(UsingMicrosoftNETSdk);
183189
hashCode.AddObject(SdkAnalysisLevel);
184190
hashCode.AddObject(UseLegacyDependencyResolver);
191+
hashCode.AddObject(RestoreDoNotWriteDependencyGraphSpec);
185192

186193
return hashCode.CombinedHash;
187194
}
@@ -230,7 +237,8 @@ public bool Equals(ProjectRestoreMetadata other)
230237
RestoreAuditProperties == other.RestoreAuditProperties &&
231238
UsingMicrosoftNETSdk == other.UsingMicrosoftNETSdk &&
232239
EqualityUtility.EqualsWithNullCheck(SdkAnalysisLevel, other.SdkAnalysisLevel) &&
233-
UseLegacyDependencyResolver == other.UseLegacyDependencyResolver;
240+
UseLegacyDependencyResolver == other.UseLegacyDependencyResolver &&
241+
RestoreDoNotWriteDependencyGraphSpec == other.RestoreDoNotWriteDependencyGraphSpec;
234242
}
235243

236244
private HashSet<string> GetSources(IList<PackageSource> sources)
@@ -284,6 +292,7 @@ protected void FillClone(ProjectRestoreMetadata clone)
284292
clone.SdkAnalysisLevel = SdkAnalysisLevel;
285293
clone.UsingMicrosoftNETSdk = UsingMicrosoftNETSdk;
286294
clone.UseLegacyDependencyResolver = UseLegacyDependencyResolver;
295+
clone.RestoreDoNotWriteDependencyGraphSpec = RestoreDoNotWriteDependencyGraphSpec;
287296
}
288297
}
289298
}

src/NuGet.Core/NuGet.ProjectModel/PublicAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ const NuGet.ProjectModel.LockFileFormat.LegacyVersion = 3 -> int
77
~static NuGet.ProjectModel.PackageSpecOperations.AddOrUpdateDependency(NuGet.ProjectModel.PackageSpec spec, NuGet.Packaging.Core.PackageIdentity identity, System.Collections.Generic.IEnumerable<string> frameworksToAdd) -> void
88
~NuGet.ProjectModel.PackagesLockFileTarget.TargetAlias.get -> string
99
~NuGet.ProjectModel.PackagesLockFileTarget.TargetAlias.set -> void
10+
NuGet.ProjectModel.ProjectRestoreMetadata.RestoreDoNotWriteDependencyGraphSpec.get -> bool
11+
NuGet.ProjectModel.ProjectRestoreMetadata.RestoreDoNotWriteDependencyGraphSpec.set -> void

0 commit comments

Comments
 (0)