Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,10 @@ internal static string GetWorkloadsVersion(WorkloadInfoHelper workloadInfoHelper
{
workloadInfoHelper ??= new WorkloadInfoHelper(false);

return workloadInfoHelper.ManifestProvider.GetWorkloadVersion();
(string version, string error) = workloadInfoHelper.ManifestProvider.GetWorkloadVersion();

// The explicit space here is intentional, as it's easy to miss in localization and crucial for parsing
return version + (error is not null ? ' ' + Workloads.Workload.List.LocalizableStrings.WorkloadVersionNotInstalledShort : string.Empty);
}

internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadInfoHelper workloadInfoHelper = null, IReporter reporter = null, string dotnetDir = null, bool showVersion = true)
Expand All @@ -56,9 +59,11 @@ internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadI
reporter ??= Utils.Reporter.Output;
string dotnetPath = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath);

string error = null;
if (showVersion)
{
reporter.WriteLine($" Workload version: {workloadInfoHelper.ManifestProvider.GetWorkloadVersion()}");
(string version, error) = workloadInfoHelper.ManifestProvider.GetWorkloadVersion();
reporter.WriteLine($" Workload version: {version}");
}

var useWorkloadSets = InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(workloadInfoHelper._currentSdkFeatureBand, workloadInfoHelper.UserLocalPath), "default.json")).UseWorkloadSets;
Expand Down Expand Up @@ -97,6 +102,11 @@ internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadI
);
reporter.WriteLine("");
}

if (error is not null)
{
reporter.WriteLine(error);
}
}

private static int ProcessArgs(ParseResult parseResult)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,15 @@ public void Run(Action workloadAction)
private WorkloadHistoryState GetWorkloadState()
{
var resolver = _workloadResolverFunc();
var currentWorkloadInfo = resolver.GetWorkloadVersion();
var currentWorkloadVersion = resolver.GetWorkloadVersion().version;
return new WorkloadHistoryState()
{
ManifestVersions = resolver.GetInstalledManifests().ToDictionary(manifest => manifest.Id.ToString(), manifest => $"{manifest.Version}/{manifest.ManifestFeatureBand}"),
InstalledWorkloads = _workloadInstaller.GetWorkloadInstallationRecordRepository()
.GetInstalledWorkloads(new SdkFeatureBand(_workloadResolver.GetSdkFeatureBand()))
.Select(id => id.ToString())
.ToList(),
WorkloadSetVersion = resolver.GetWorkloadVersion()
WorkloadSetVersion = currentWorkloadVersion
};

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,9 @@
<data name="WorkloadSetFromGlobalJsonInstalled" xml:space="preserve">
<value>Found workload version {0} pinned in the global.json file at {1}.</value>
</data>
<data name="WorkloadVersionNotInstalledShort" xml:space="preserve">
<value>(not installed)</value>
</data>
<data name="WorkloadSetFromGlobalJsonNotInstalled" xml:space="preserve">
<value>Found workload version {0} pinned in the global.json file at {1}, but it was not installed. Running `dotnet workload install`, `dotnet workload update`, or `dotnet workload restore` may fix this.</value>
</data>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public override int Execute()
}
else
{
Reporter.WriteLine(string.Format(LocalizableStrings.WorkloadSetVersion, _workloadListHelper.WorkloadResolver.GetWorkloadVersion() ?? "unknown"));
Reporter.WriteLine(string.Format(LocalizableStrings.WorkloadSetVersion, _workloadListHelper.WorkloadResolver.GetWorkloadVersion().version ?? "unknown"));
}

Reporter.WriteLine();
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public interface IWorkloadManifestProvider

string GetSdkFeatureBand();

string? GetWorkloadVersion();
(string? version, string? error) GetWorkloadVersion();

Dictionary<string, WorkloadSet> GetAvailableWorkloadSets();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public interface IWorkloadResolver
string GetManifestFeatureBand(string manifestId);
IEnumerable<WorkloadManifestInfo> GetInstalledManifests();
string GetSdkFeatureBand();
string? GetWorkloadVersion();
(string? version, string? error) GetWorkloadVersion();
IEnumerable<WorkloadId> GetUpdatedWorkloads(WorkloadResolver advertisingManifestResolver, IEnumerable<WorkloadId> installedWorkloads);
WorkloadManifest GetManifestFromWorkload(WorkloadId workloadId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,20 +243,29 @@ void ThrowExceptionIfManifestsNotAvailable()
}
}

public string? GetWorkloadVersion()
public (string? version, string? error) GetWorkloadVersion()
{
if (_globalJsonWorkloadSetVersion != null)
{
return _globalJsonWorkloadSetVersion;
// _exceptionToThrow is set to null here if and only if the workload set is not installed.
// If this came from --info or workload --version, the error won't be thrown, but we should still
// suggest running `dotnet workload restore` to the user.
return (_globalJsonWorkloadSetVersion, _exceptionToThrow?.Message);
}

ThrowExceptionIfManifestsNotAvailable();

if (_workloadSet?.Version is not null)
{
return _workloadSet?.Version!;
return (_workloadSet.Version, null);
}

var installStateFilePath = Path.Combine(WorkloadInstallType.GetInstallStateFolder(_sdkVersionBand, _sdkOrUserLocalPath), "default.json");
var installState = InstallStateContents.FromPath(installStateFilePath)!;
string? shouldRestoreMessage = installState.UseWorkloadSets == true ?
Strings.ShouldInstallAWorkloadSet :
null;

using (SHA256 sha256Hash = SHA256.Create())
{
byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(string.Join(";",
Expand All @@ -271,7 +280,7 @@ void ThrowExceptionIfManifestsNotAvailable()
sb.Append(bytes[b].ToString("x2"));
}

return $"{_sdkVersionBand.ToStringWithoutPrerelease()}-manifests.{sb}";
return ($"{_sdkVersionBand.ToStringWithoutPrerelease()}-manifests.{sb}", shouldRestoreMessage);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,9 @@
<value>Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version.</value>
<comment>{Locked="dotnet workload restore"}</comment>
</data>
<data name="ShouldInstallAWorkloadSet" xml:space="preserve">
<value>Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version.</value>
</data>
<data name="WorkloadVersionNotFound" xml:space="preserve">
<value>Workload version {0} was not found.</value>
</data>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public IEnumerable<string> GetManifestDirectories()
}

public string GetSdkFeatureBand() => _sdkVersionBand;
public string? GetWorkloadVersion() => _sdkVersionBand.ToString() + ".2";
public (string? version, string? error) GetWorkloadVersion() => (_sdkVersionBand.ToString() + ".2", null);
public Dictionary<string, WorkloadSet> GetAvailableWorkloadSets() => new();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public void RefreshWorkloadManifests()
InitializeManifests();
}

public string? GetWorkloadVersion() => _manifestProvider.GetWorkloadVersion();
public (string? version, string? error) GetWorkloadVersion() => _manifestProvider.GetWorkloadVersion();

private void LoadManifestsFromProvider(IWorkloadManifestProvider manifestProvider)
{
Expand Down Expand Up @@ -778,7 +778,7 @@ public void RefreshWorkloadManifests() { }
public Dictionary<string, WorkloadSet> GetAvailableWorkloadSets() => new();
public IEnumerable<ReadableWorkloadManifest> GetManifests() => Enumerable.Empty<ReadableWorkloadManifest>();
public string GetSdkFeatureBand() => _sdkFeatureBand;
public string? GetWorkloadVersion() => _sdkFeatureBand.ToString() + ".2";
public (string? version, string? error) GetWorkloadVersion() => (_sdkFeatureBand + ".2", null);
}
}

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading