Преглед изворни кода

Avoid modifying csproj globbing includes

Check if the found globbing include already matches the new path on
moving scripts to avoid modifying users' csproj files.
Raul Santos пре 3 година
родитељ
комит
ced4f3519d
1 измењених фајлова са 14 додато и 1 уклоњено
  1. 14 1
      modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectUtils.cs

+ 14 - 1
modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectUtils.cs

@@ -77,6 +77,19 @@ namespace GodotTools.ProjectEditor
             if (item == null)
                 return;
 
+            // Check if the found item include already matches the new path
+            var glob = MSBuildGlob.Parse(item.Include);
+            if (glob.IsMatch(normalizedNewInclude))
+                return;
+
+            // Otherwise, if the item include uses globbing it's better to add a new item instead of modifying
+            if (!string.IsNullOrEmpty(glob.WildcardDirectoryPart) || glob.FilenamePart.Contains("*"))
+            {
+                root.AddItem(itemType, normalizedNewInclude.RelativeToPath(dir).Replace("/", "\\"));
+                root.Save();
+                return;
+            }
+
             item.Include = normalizedNewInclude.RelativeToPath(dir).Replace("/", "\\");
             root.Save();
         }
@@ -315,7 +328,7 @@ namespace GodotTools.ProjectEditor
 
             // Godot API References
 
-            var apiAssemblies = new[] {ApiAssemblyNames.Core, ApiAssemblyNames.Editor};
+            var apiAssemblies = new[] { ApiAssemblyNames.Core, ApiAssemblyNames.Editor };
 
             RemoveElements(root.ItemGroups.SelectMany(g => g.Items)
                 .Where(i => i.ItemType == "Reference" && apiAssemblies.Contains(i.Include)));