Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ public static InstallStateContents FromString(string contents)
return JsonSerializer.Deserialize<InstallStateContents>(contents, s_options);
}

public static InstallStateContents FromPath(string path)
{
return File.Exists(path) ? FromString(File.ReadAllText(path)) : new InstallStateContents();
}

public override string ToString()
{
return JsonSerializer.Serialize<InstallStateContents>(this, s_options);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ public void RemoveManifestsFromInstallState(SdkFeatureBand sdkFeatureBand)

if (File.Exists(path))
{
var installStateContents = File.Exists(path) ? InstallStateContents.FromString(File.ReadAllText(path)) : new InstallStateContents();
var installStateContents = InstallStateContents.FromString(File.ReadAllText(path));
installStateContents.Manifests = null;
File.WriteAllText(path, installStateContents.ToString());
}
Expand All @@ -468,7 +468,7 @@ public void SaveInstallStateManifestVersions(SdkFeatureBand sdkFeatureBand, Dict
{
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(_sdkFeatureBand, _dotnetDir), "default.json");
Directory.CreateDirectory(Path.GetDirectoryName(path));
var installStateContents = File.Exists(path) ? InstallStateContents.FromString(File.ReadAllText(path)) : new InstallStateContents();
var installStateContents = InstallStateContents.FromPath(path);
installStateContents.Manifests = manifestContents;
File.WriteAllText(path, installStateContents.ToString());
}
Expand All @@ -477,7 +477,7 @@ public void UpdateInstallMode(SdkFeatureBand sdkFeatureBand, bool newMode)
{
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, _dotnetDir), "default.json");
Directory.CreateDirectory(Path.GetDirectoryName(path));
var installStateContents = File.Exists(path) ? InstallStateContents.FromString(File.ReadAllText(path)) : new InstallStateContents();
var installStateContents = InstallStateContents.FromPath(path);
installStateContents.UseWorkloadSets = newMode;
File.WriteAllText(path, installStateContents.ToString());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -285,17 +285,21 @@ protected uint RepairMsi(string productCode, string logFile)
/// <exception cref="InvalidOperationException"></exception>
protected void UpdateInstallMode(SdkFeatureBand sdkFeatureBand, bool newMode)
{
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, DotNetHome), "default.json");
var installStateContents = InstallStateContents.FromPath(path);
if (installStateContents.UseWorkloadSets == newMode)
{
return;
}

Elevate();

if (IsElevated)
{
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, DotNetHome), "default.json");
// Create the parent folder for the state file and set up all required ACLs
SecurityUtils.CreateSecureDirectory(Path.GetDirectoryName(path));
var installStateContents = File.Exists(path) ? InstallStateContents.FromString(File.ReadAllText(path)) : new InstallStateContents();
installStateContents.UseWorkloadSets = newMode;
File.WriteAllText(path, installStateContents.ToString());

SecurityUtils.SecureFile(path);
}
else if (IsClient)
Expand Down Expand Up @@ -537,6 +541,11 @@ protected void UpdateDependent(InstallRequestType requestType, string providerKe
public void RemoveManifestsFromInstallState(SdkFeatureBand sdkFeatureBand)
{
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, DotNetHome), "default.json");
var installStateContents = InstallStateContents.FromPath(path);
if (installStateContents.Manifests == null)
{
return;
}

if (!File.Exists(path))
{
Expand All @@ -550,7 +559,6 @@ public void RemoveManifestsFromInstallState(SdkFeatureBand sdkFeatureBand)
{
if (File.Exists(path))
{
var installStateContents = InstallStateContents.FromString(File.ReadAllText(path));
installStateContents.Manifests = null;
File.WriteAllText(path, installStateContents.ToString());
}
Expand All @@ -570,14 +578,22 @@ public void RemoveManifestsFromInstallState(SdkFeatureBand sdkFeatureBand)
public void SaveInstallStateManifestVersions(SdkFeatureBand sdkFeatureBand, Dictionary<string, string> manifestContents)
{
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, DotNetHome), "default.json");
var installStateContents = InstallStateContents.FromPath(path);
if (installStateContents.Manifests != null && // manifestContents should not be null here
installStateContents.Manifests.Count == manifestContents.Count &&
installStateContents.Manifests.All(m => manifestContents.TryGetValue(m.Key, out var val) && val.Equals(m.Value)))
{
return;
}

Elevate();

if (IsElevated)
{
// Create the parent folder for the state file and set up all required ACLs
SecurityUtils.CreateSecureDirectory(Path.GetDirectoryName(path));

var installStateContents = File.Exists(path) ? InstallStateContents.FromString(File.ReadAllText(path)) : new InstallStateContents();

installStateContents.Manifests = manifestContents;
File.WriteAllText(path, installStateContents.ToString());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ public void RemoveManifestsFromInstallState(SdkFeatureBand sdkFeatureBand)
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, _dotnetDir), "default.json");
if (File.Exists(path))
{
var installStateContents = File.Exists(path) ? InstallStateContents.FromString(File.ReadAllText(path)) : new InstallStateContents();
var installStateContents = InstallStateContents.FromPath(path);
installStateContents.Manifests = null;
File.WriteAllText(path, installStateContents.ToString());
}
Expand All @@ -180,7 +180,7 @@ public void SaveInstallStateManifestVersions(SdkFeatureBand sdkFeatureBand, Dict
{
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, _dotnetDir), "default.json");
Directory.CreateDirectory(Path.GetDirectoryName(path));
var installStateContents = File.Exists(path) ? InstallStateContents.FromString(File.ReadAllText(path)) : new InstallStateContents();
var installStateContents = InstallStateContents.FromPath(path);
installStateContents.Manifests = manifestContents;
File.WriteAllText(path, installStateContents.ToString());
}
Expand Down