Skip to content

Commit 56bb1a6

Browse files
committed
Umbraco Installer - adding the Parameter element with the XDT remove using code (quite a lot)
1 parent 24d4590 commit 56bb1a6

File tree

1 file changed

+31
-21
lines changed

1 file changed

+31
-21
lines changed

src/UmbracoFileSystemProviders.Azure.Installer/InstallerController.cs

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,24 @@ public InstallerStatus PostParameters(IEnumerable<Parameter> parameters)
8080

8181
internal static bool SaveParametersToXdt(string xdtPath, IEnumerable<Parameter> newParameters)
8282
{
83-
var modified = false;
8483
var result = false;
8584

8685
var document = XmlHelper.OpenAsXmlDocument(xdtPath);
8786

87+
// Inset a Parameter element with Xdt remove so that updated values get saved (for upgrades), we don't want this for NuGet packages which is why it's here instead
88+
var nsMgr = new XmlNamespaceManager(document.NameTable);
89+
var strNamespace = "http://schemas.microsoft.com/XML-Document-Transform";
90+
nsMgr.AddNamespace("xdt", strNamespace);
91+
92+
var providerElement = document.SelectSingleNode(string.Format("//Provider[@type = '{0}']", ProviderType));
93+
var parametersElement = providerElement.SelectSingleNode("./Parameters");
94+
var parameterRemoveElement = document.CreateNode("element", "Parameters", null);
95+
var tranformAttr = document.CreateAttribute("Transform", strNamespace);
96+
tranformAttr.Value = "Remove";
97+
98+
parameterRemoveElement.Attributes.Append(tranformAttr);
99+
providerElement.InsertBefore(parameterRemoveElement, parametersElement);
100+
88101
var parameters = document.SelectNodes(string.Format("//Provider[@type = '{0}']/Parameters/add", ProviderType));
89102

90103
if (parameters == null)
@@ -96,34 +109,31 @@ internal static bool SaveParametersToXdt(string xdtPath, IEnumerable<Parameter>
96109
{
97110
var key = parameter.GetAttribute("key");
98111
var value = parameter.GetAttribute("value");
99-
var newValue = newParameters.FirstOrDefault(x => x.Key == key).Value;
100112

101-
if (!value.Equals(newValue))
113+
var newParameter = newParameters.FirstOrDefault(x => x.Key == key);
114+
if (newParameter != null)
102115
{
103-
parameter.SetAttribute("value", newValue);
104-
modified = true;
116+
var newValue = newParameter.Value;
117+
118+
if (!value.Equals(newValue))
119+
{
120+
parameter.SetAttribute("value", newValue);
121+
}
105122
}
106123
}
107124

108-
if (modified)
125+
try
109126
{
110-
try
111-
{
112-
document.Save(xdtPath);
113-
// No errors so the result is true
114-
result = true;
115-
}
116-
catch (Exception e)
117-
{
118-
// Log error message
119-
var message = "Error saving XDT Parameters: " + e.Message;
120-
LogHelper.Error(typeof(InstallerController), message, e);
121-
}
127+
document.Save(xdtPath);
128+
129+
// No errors so the result is true
130+
result = true;
122131
}
123-
else
132+
catch (Exception e)
124133
{
125-
// nothing to modify
126-
result = true;
134+
// Log error message
135+
var message = "Error saving XDT Parameters: " + e.Message;
136+
LogHelper.Error(typeof(InstallerController), message, e);
127137
}
128138

129139
return result;

0 commit comments

Comments
 (0)