Skip to content

Commit c5dbaed

Browse files
authored
[StaticWebAssets] Avoid reading manifest for hash (#43710)
1 parent 6ef345b commit c5dbaed

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets

+4-1
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ Copyright (c) .NET Foundation. All rights reserved.
437437
<!-- Manifest paths -->
438438
<_StaticWebAssetsManifestBase Condition="'$(_StaticWebAssetsManifestBase)' == ''">$(IntermediateOutputPath)</_StaticWebAssetsManifestBase>
439439
<StaticWebAssetBuildManifestPath>$(_StaticWebAssetsManifestBase)staticwebassets.build.json</StaticWebAssetBuildManifestPath>
440+
<StaticWebAssetsBuildManifestCacheFilePath>$(StaticWebAssetBuildManifestPath).cache</StaticWebAssetsBuildManifestCacheFilePath>
440441
<StaticWebAssetPackManifestPath>$(_StaticWebAssetsManifestBase)staticwebassets.pack.json</StaticWebAssetPackManifestPath>
441442
<StaticWebAssetDevelopmentManifestPath>$(_StaticWebAssetsManifestBase)staticwebassets.development.json</StaticWebAssetDevelopmentManifestPath>
442443
<StaticWebAssetEndpointsBuildManifestPath>$(_StaticWebAssetsManifestBase)staticwebassets.build.endpoints.json</StaticWebAssetEndpointsBuildManifestPath>
@@ -620,7 +621,8 @@ Copyright (c) .NET Foundation. All rights reserved.
620621
DiscoveryPatterns="@(StaticWebAssetDiscoveryPattern)"
621622
Assets="@(StaticWebAsset)"
622623
Endpoints="@(StaticWebAssetEndpoint)"
623-
ManifestPath="$(StaticWebAssetBuildManifestPath)">
624+
ManifestPath="$(StaticWebAssetBuildManifestPath)"
625+
ManifestCacheFilePath="$(StaticWebAssetsBuildManifestCacheFilePath)">
624626
</GenerateStaticWebAssetsManifest>
625627

626628
<GenerateStaticWebAssetEndpointsManifest
@@ -649,6 +651,7 @@ Copyright (c) .NET Foundation. All rights reserved.
649651

650652
<ItemGroup>
651653
<FileWrites Include="$(StaticWebAssetBuildManifestPath)" />
654+
<FileWrites Include="$(StaticWebAssetsBuildManifestCacheFilePath)" />
652655
<FileWrites Include="$(StaticWebAssetDevelopmentManifestPath)" />
653656
<FileWrites Include="$(StaticWebAssetEndpointsBuildManifestPath)" />
654657
</ItemGroup>

src/StaticWebAssetsSdk/Tasks/GenerateStaticWebAssetsManifest.cs

+20-9
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ public class GenerateStaticWebAssetsManifest : Task
3636
[Required]
3737
public string ManifestPath { get; set; }
3838

39+
public string ManifestCacheFilePath { get; set; }
40+
3941
public override bool Execute()
4042
{
4143
try
@@ -116,19 +118,28 @@ private IEnumerable<StaticWebAssetEndpoint> FilterPublishEndpointsIfNeeded(IEnum
116118

117119
private void PersistManifest(StaticWebAssetsManifest manifest)
118120
{
119-
var data = JsonSerializer.SerializeToUtf8Bytes(manifest, StaticWebAssetsJsonSerializerContext.RelaxedEscaping.StaticWebAssetsManifest);
121+
var cacheFileExists = File.Exists(ManifestCacheFilePath);
120122
var fileExists = File.Exists(ManifestPath);
121-
var existingManifestHash = fileExists ? StaticWebAssetsManifest.FromJsonBytes(File.ReadAllBytes(ManifestPath)).Hash : "";
123+
var existingManifestHash = cacheFileExists ?
124+
File.ReadAllText(ManifestCacheFilePath) :
125+
fileExists ? StaticWebAssetsManifest.FromJsonBytes(File.ReadAllBytes(ManifestPath)).Hash : "";
122126

123-
if (!fileExists)
127+
if (!fileExists || !string.Equals(manifest.Hash, existingManifestHash, StringComparison.Ordinal))
124128
{
125-
Log.LogMessage(MessageImportance.Low, $"Creating manifest because manifest file '{ManifestPath}' does not exist.");
126-
File.WriteAllBytes(ManifestPath, data);
127-
}
128-
else if (!string.Equals(manifest.Hash, existingManifestHash, StringComparison.Ordinal))
129-
{
130-
Log.LogMessage(MessageImportance.Low, $"Updating manifest because manifest version '{manifest.Hash}' is different from existing manifest hash '{existingManifestHash}'.");
129+
var data = JsonSerializer.SerializeToUtf8Bytes(manifest, StaticWebAssetsJsonSerializerContext.RelaxedEscaping.StaticWebAssetsManifest);
130+
if(!fileExists)
131+
{
132+
Log.LogMessage(MessageImportance.Low, $"Creating manifest because manifest file '{ManifestPath}' does not exist.");
133+
}
134+
else
135+
{
136+
Log.LogMessage(MessageImportance.Low, $"Updating manifest because manifest version '{manifest.Hash}' is different from existing manifest hash '{existingManifestHash}'.");
137+
}
131138
File.WriteAllBytes(ManifestPath, data);
139+
if(!string.IsNullOrEmpty(ManifestCacheFilePath))
140+
{
141+
File.WriteAllText(ManifestCacheFilePath, manifest.Hash);
142+
}
132143
}
133144
else
134145
{

0 commit comments

Comments
 (0)