summaryrefslogtreecommitdiff
path: root/modules/mono/editor
diff options
context:
space:
mode:
authorIgnacio Etcheverry <ignalfonsore@gmail.com>2020-04-23 16:12:22 +0200
committerIgnacio Etcheverry <ignalfonsore@gmail.com>2020-04-23 16:18:55 +0200
commit81f13f61719a2c1c5451cdb7f8b2dd003db8c56d (patch)
treef7e71811fe975283a424e5219c8b585353522c22 /modules/mono/editor
parent43f0767390cabd337b31cf777fa5c04251c68fbc (diff)
C#: Fix always saving copy of csproj even with no changes
This was a regression from 93d7ec88360a467a3041c0aa08390daa1f75892b (#38110). Mono's old implementation of Microsoft.Build hardcodes HasUnsavedChanges to always return true. This workaround can be reverted once we switch to official Microsoft.Build.
Diffstat (limited to 'modules/mono/editor')
-rw-r--r--modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectUtils.cs25
1 files changed, 23 insertions, 2 deletions
diff --git a/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectUtils.cs b/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectUtils.cs
index a875e1c14f..f2ebef1a7d 100644
--- a/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectUtils.cs
+++ b/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectUtils.cs
@@ -13,7 +13,7 @@ namespace GodotTools.ProjectEditor
{
public ProjectRootElement Root { get; }
- public bool HasUnsavedChanges => Root.HasUnsavedChanges;
+ public bool HasUnsavedChanges { get; set; }
public void Save() => Root.Save();
@@ -78,6 +78,8 @@ namespace GodotTools.ProjectEditor
var root = ProjectRootElement.Open(projectPath);
Debug.Assert(root != null);
+ bool dirty = false;
+
var oldFolderNormalized = oldFolder.NormalizePath();
var newFolderNormalized = newFolder.NormalizePath();
string absOldFolderNormalized = Path.GetFullPath(oldFolderNormalized).NormalizePath();
@@ -88,9 +90,10 @@ namespace GodotTools.ProjectEditor
string absPathNormalized = Path.GetFullPath(item.Include).NormalizePath();
string absNewIncludeNormalized = absNewFolderNormalized + absPathNormalized.Substring(absOldFolderNormalized.Length);
item.Include = absNewIncludeNormalized.RelativeToPath(dir).Replace("/", "\\");
+ dirty = true;
}
- if (root.HasUnsavedChanges)
+ if (dirty)
root.Save();
}
@@ -183,6 +186,7 @@ namespace GodotTools.ProjectEditor
}
root.AddProperty(name, value).Condition = " " + condition + " ";
+ project.HasUnsavedChanges = true;
}
AddPropertyIfNotPresent(name: "ApiConfiguration",
@@ -224,6 +228,7 @@ namespace GodotTools.ProjectEditor
}
referenceWithHintPath.AddMetadata("HintPath", hintPath);
+ project.HasUnsavedChanges = true;
return;
}
@@ -232,12 +237,14 @@ namespace GodotTools.ProjectEditor
{
// Found a Reference item without a HintPath
referenceWithoutHintPath.AddMetadata("HintPath", hintPath);
+ project.HasUnsavedChanges = true;
return;
}
}
// Found no Reference item at all. Add it.
root.AddItem("Reference", referenceName).Condition = " " + condition + " ";
+ project.HasUnsavedChanges = true;
}
const string coreProjectName = "GodotSharp";
@@ -270,6 +277,7 @@ namespace GodotTools.ProjectEditor
{
configItem.Value = "Debug";
foundOldConfiguration = true;
+ project.HasUnsavedChanges = true;
}
}
@@ -277,6 +285,7 @@ namespace GodotTools.ProjectEditor
{
root.PropertyGroups.First(g => g.Condition == string.Empty)?
.AddProperty("GodotProjectGeneratorVersion", Assembly.GetExecutingAssembly().GetName().Version.ToString());
+ project.HasUnsavedChanges = true;
}
if (!foundOldConfiguration)
@@ -300,21 +309,33 @@ namespace GodotTools.ProjectEditor
void MigrateConditions(string oldCondition, string newCondition)
{
foreach (var propertyGroup in root.PropertyGroups.Where(g => g.Condition.Trim() == oldCondition))
+ {
propertyGroup.Condition = " " + newCondition + " ";
+ project.HasUnsavedChanges = true;
+ }
foreach (var propertyGroup in root.PropertyGroups)
{
foreach (var prop in propertyGroup.Properties.Where(p => p.Condition.Trim() == oldCondition))
+ {
prop.Condition = " " + newCondition + " ";
+ project.HasUnsavedChanges = true;
+ }
}
foreach (var itemGroup in root.ItemGroups.Where(g => g.Condition.Trim() == oldCondition))
+ {
itemGroup.Condition = " " + newCondition + " ";
+ project.HasUnsavedChanges = true;
+ }
foreach (var itemGroup in root.ItemGroups)
{
foreach (var item in itemGroup.Items.Where(item => item.Condition.Trim() == oldCondition))
+ {
item.Condition = " " + newCondition + " ";
+ project.HasUnsavedChanges = true;
+ }
}
}