Skip to content

Commit 83f146d

Browse files
authored
fix bug in workload history recorder (#42536)
2 parents ddbc223 + 0cf6d03 commit 83f146d

File tree

12 files changed

+69
-20
lines changed

12 files changed

+69
-20
lines changed

src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ internal static string GetWorkloadsVersion(WorkloadInfoHelper workloadInfoHelper
3939
{
4040
workloadInfoHelper ??= new WorkloadInfoHelper(false);
4141

42-
return workloadInfoHelper.ManifestProvider.GetWorkloadVersion();
42+
return workloadInfoHelper.ManifestProvider.GetWorkloadVersion().Version;
4343
}
4444

4545
internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadInfoHelper workloadInfoHelper = null, IReporter reporter = null, string dotnetDir = null, bool showVersion = true)
@@ -59,7 +59,7 @@ internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadI
5959

6060
if (showVersion)
6161
{
62-
reporter.WriteLine($" Workload version: {workloadInfoHelper.ManifestProvider.GetWorkloadVersion()}");
62+
reporter.WriteLine($" Workload version: {workloadInfoHelper.ManifestProvider.GetWorkloadVersion().Version}");
6363
}
6464

6565
var useWorkloadSets = InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(workloadInfoHelper._currentSdkFeatureBand, workloadInfoHelper.UserLocalPath), "default.json")).UseWorkloadSets;

src/Cli/dotnet/commands/dotnet-workload/WorkloadHistoryRecorder.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,16 @@ public void Run(Action workloadAction)
5454
private WorkloadHistoryState GetWorkloadState()
5555
{
5656
var resolver = _workloadResolverFunc();
57-
var currentWorkloadInfo = resolver.GetWorkloadVersion();
57+
var currentWorkloadVersion = resolver.GetWorkloadVersion();
58+
var versionString = currentWorkloadVersion.WorkloadInstallType == WorkloadVersion.Type.LooseManifest ? string.Empty : currentWorkloadVersion.Version;
5859
return new WorkloadHistoryState()
5960
{
6061
ManifestVersions = resolver.GetInstalledManifests().ToDictionary(manifest => manifest.Id.ToString(), manifest => $"{manifest.Version}/{manifest.ManifestFeatureBand}"),
6162
InstalledWorkloads = _workloadInstaller.GetWorkloadInstallationRecordRepository()
6263
.GetInstalledWorkloads(new SdkFeatureBand(_workloadResolver.GetSdkFeatureBand()))
6364
.Select(id => id.ToString())
6465
.ToList(),
65-
WorkloadSetVersion = resolver.GetWorkloadVersion()
66+
WorkloadSetVersion = versionString
6667
};
6768

6869
}

src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public override int Execute()
9393
}
9494
else
9595
{
96-
Reporter.WriteLine(string.Format(LocalizableStrings.WorkloadSetVersion, _workloadListHelper.WorkloadResolver.GetWorkloadVersion() ?? "unknown"));
96+
Reporter.WriteLine(string.Format(LocalizableStrings.WorkloadSetVersion, _workloadListHelper.WorkloadResolver.GetWorkloadVersion().Version ?? "unknown"));
9797
}
9898

9999
Reporter.WriteLine();

src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/IWorkloadManifestProvider.cs

+13-1
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,20 @@ public interface IWorkloadManifestProvider
1414

1515
string GetSdkFeatureBand();
1616

17-
string? GetWorkloadVersion();
17+
WorkloadVersion GetWorkloadVersion();
1818

1919
Dictionary<string, WorkloadSet> GetAvailableWorkloadSets();
2020
}
21+
22+
public record WorkloadVersion
23+
{
24+
public enum Type
25+
{
26+
WorkloadSet,
27+
LooseManifest
28+
}
29+
30+
public string? Version;
31+
public Type WorkloadInstallType;
32+
}
2133
}

src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/IWorkloadResolver.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public interface IWorkloadResolver
2020
string GetManifestFeatureBand(string manifestId);
2121
IEnumerable<WorkloadManifestInfo> GetInstalledManifests();
2222
string GetSdkFeatureBand();
23-
string? GetWorkloadVersion();
23+
WorkloadVersion GetWorkloadVersion();
2424
IEnumerable<WorkloadId> GetUpdatedWorkloads(WorkloadResolver advertisingManifestResolver, IEnumerable<WorkloadId> installedWorkloads);
2525
WorkloadManifest GetManifestFromWorkload(WorkloadId workloadId);
2626

src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs

+16-4
Original file line numberDiff line numberDiff line change
@@ -243,18 +243,26 @@ void ThrowExceptionIfManifestsNotAvailable()
243243
}
244244
}
245245

246-
public string? GetWorkloadVersion()
246+
public WorkloadVersion GetWorkloadVersion()
247247
{
248248
if (_globalJsonWorkloadSetVersion != null)
249249
{
250-
return _globalJsonWorkloadSetVersion;
250+
return new WorkloadVersion()
251+
{
252+
Version = _globalJsonWorkloadSetVersion,
253+
WorkloadInstallType = WorkloadVersion.Type.WorkloadSet
254+
};
251255
}
252256

253257
ThrowExceptionIfManifestsNotAvailable();
254258

255259
if (_workloadSet?.Version is not null)
256260
{
257-
return _workloadSet?.Version!;
261+
return new WorkloadVersion()
262+
{
263+
Version = _workloadSet.Version,
264+
WorkloadInstallType = WorkloadVersion.Type.WorkloadSet
265+
};
258266
}
259267

260268
using (SHA256 sha256Hash = SHA256.Create())
@@ -271,7 +279,11 @@ void ThrowExceptionIfManifestsNotAvailable()
271279
sb.Append(bytes[b].ToString("x2"));
272280
}
273281

274-
return $"{_sdkVersionBand.ToStringWithoutPrerelease()}-manifests.{sb}";
282+
return new WorkloadVersion()
283+
{
284+
Version = $"{_sdkVersionBand.ToStringWithoutPrerelease()}-manifests.{sb}",
285+
WorkloadInstallType = WorkloadVersion.Type.LooseManifest
286+
};
275287
}
276288
}
277289

src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/TempDirectoryWorkloadManifestProvider.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ public IEnumerable<string> GetManifestDirectories()
5353
}
5454

5555
public string GetSdkFeatureBand() => _sdkVersionBand;
56-
public string? GetWorkloadVersion() => _sdkVersionBand.ToString() + ".2";
56+
public WorkloadVersion GetWorkloadVersion() => new WorkloadVersion
57+
{
58+
Version = _sdkVersionBand + ".2",
59+
WorkloadInstallType = WorkloadVersion.Type.LooseManifest
60+
};
5761
public Dictionary<string, WorkloadSet> GetAvailableWorkloadSets() => new();
5862
}
5963
}

src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/WorkloadResolver.cs

+6-2
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public void RefreshWorkloadManifests()
115115
InitializeManifests();
116116
}
117117

118-
public string? GetWorkloadVersion() => _manifestProvider.GetWorkloadVersion();
118+
public WorkloadVersion GetWorkloadVersion() => _manifestProvider.GetWorkloadVersion();
119119

120120
private void LoadManifestsFromProvider(IWorkloadManifestProvider manifestProvider)
121121
{
@@ -778,7 +778,11 @@ public void RefreshWorkloadManifests() { }
778778
public Dictionary<string, WorkloadSet> GetAvailableWorkloadSets() => new();
779779
public IEnumerable<ReadableWorkloadManifest> GetManifests() => Enumerable.Empty<ReadableWorkloadManifest>();
780780
public string GetSdkFeatureBand() => _sdkFeatureBand;
781-
public string? GetWorkloadVersion() => _sdkFeatureBand.ToString() + ".2";
781+
public WorkloadVersion GetWorkloadVersion() => new WorkloadVersion
782+
{
783+
Version = _sdkFeatureBand + ".2",
784+
WorkloadInstallType = WorkloadVersion.Type.LooseManifest
785+
};
782786
}
783787
}
784788

test/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/FakeManifestProvider.cs

+10-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,11 @@ public IEnumerable<ReadableWorkloadManifest> GetManifests()
4040

4141
public string GetSdkFeatureBand() => "8.0.100";
4242
public Dictionary<string, WorkloadSet> GetAvailableWorkloadSets() => throw new NotImplementedException();
43-
public string? GetWorkloadVersion() => "8.0.100.2";
43+
public WorkloadVersion GetWorkloadVersion() => new WorkloadVersion
44+
{
45+
Version = "8.0.100.2",
46+
WorkloadInstallType = WorkloadVersion.Type.LooseManifest
47+
};
4448
}
4549

4650
internal class InMemoryFakeManifestProvider : IWorkloadManifestProvider, IEnumerable<(string id, string content)>
@@ -67,6 +71,10 @@ public IEnumerable<ReadableWorkloadManifest> GetManifests()
6771
IEnumerator IEnumerable.GetEnumerator() => throw new NotImplementedException();
6872
public string GetSdkFeatureBand() => "8.0.100";
6973
public Dictionary<string, WorkloadSet> GetAvailableWorkloadSets() => throw new NotImplementedException();
70-
public string? GetWorkloadVersion() => "8.0.100.2";
74+
public WorkloadVersion GetWorkloadVersion() => new WorkloadVersion
75+
{
76+
Version = "8.0.100.2",
77+
WorkloadInstallType = WorkloadVersion.Type.LooseManifest
78+
};
7179
}
7280
}

test/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,14 @@ var sdkDirectoryWorkloadManifestProvider
9393

9494
if (useWorkloadSet)
9595
{
96-
sdkDirectoryWorkloadManifestProvider.GetWorkloadVersion().Should().Be("8.0.200");
96+
sdkDirectoryWorkloadManifestProvider.GetWorkloadVersion().Version.Should().Be("8.0.200");
9797
}
9898
else
9999
{
100100
string[] manifests = sdkDirectoryWorkloadManifestProvider.GetManifests().OrderBy(m => m.ManifestId).Select(m => $"{m.ManifestId}.{m.ManifestFeatureBand}.{m.ManifestVersion}").ToArray();
101101
manifests.Length.Should().Be(1);
102102
manifests.Should().Contain("android.8.0.200.33.0.2-rc.1");
103-
sdkDirectoryWorkloadManifestProvider.GetWorkloadVersion().Should().Be("8.0.200-manifests.4ba11739");
103+
sdkDirectoryWorkloadManifestProvider.GetWorkloadVersion().Version.Should().Be("8.0.200-manifests.4ba11739");
104104
}
105105

106106
Directory.Delete(Path.Combine(_manifestRoot, "8.0.100"), recursive: true);

test/dotnet-workload-install.Tests/MockManifestProvider.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public IEnumerable<ReadableWorkloadManifest> GetManifests()
4848
}
4949

5050
public string GetSdkFeatureBand() => SdkFeatureBand.ToString();
51-
public string GetWorkloadVersion() => SdkFeatureBand.ToString() + ".2";
51+
public WorkloadVersion GetWorkloadVersion() => new WorkloadVersion
52+
{
53+
Version = GetSdkFeatureBand() + ".2",
54+
WorkloadInstallType = WorkloadVersion.Type.LooseManifest
55+
};
5256
}
5357
}

test/dotnet-workload-search.Tests/MockWorkloadResolver.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,11 @@ public void RefreshWorkloadManifests() { /* noop */ }
3939
public IEnumerable<WorkloadManifestInfo> GetInstalledManifests() => _installedManifests ?? throw new NotImplementedException();
4040
public IWorkloadResolver CreateOverlayResolver(IWorkloadManifestProvider overlayManifestProvider) => throw new NotImplementedException();
4141
public string GetSdkFeatureBand() => "12.0.400";
42-
public string GetWorkloadVersion() => "12.0.400.2";
42+
public WorkloadVersion GetWorkloadVersion() => new WorkloadVersion()
43+
{
44+
Version = "12.0.400.2",
45+
WorkloadInstallType = WorkloadVersion.Type.LooseManifest
46+
};
4347
public IEnumerable<WorkloadId> GetUpdatedWorkloads(WorkloadResolver advertisingManifestResolver, IEnumerable<WorkloadId> installedWorkloads) => throw new NotImplementedException();
4448
WorkloadResolver IWorkloadResolver.CreateOverlayResolver(IWorkloadManifestProvider overlayManifestProvider) => throw new NotImplementedException();
4549
WorkloadManifest IWorkloadResolver.GetManifestFromWorkload(WorkloadId workloadId) => throw new NotImplementedException();

0 commit comments

Comments
 (0)