diff --git a/BeefBuild/src/BuildApp.bf b/BeefBuild/src/BuildApp.bf index 126752a6..3aaacb3e 100644 --- a/BeefBuild/src/BuildApp.bf +++ b/BeefBuild/src/BuildApp.bf @@ -110,7 +110,7 @@ namespace BeefBuild { mWorkspace.mName = new String(); Path.GetFileName(mWorkspace.mDir, mWorkspace.mName); - LoadProperties(); + CustomBuildProperties.Load(false); LoadWorkspace(mVerb); } else @@ -308,15 +308,21 @@ namespace BeefBuild int splitIdx = (int)value.IndexOf('='); if (splitIdx != -1) { - String propertyKey = new String(); + String propertyName = new String(); StringView propertyKeyView = value.Substring(0, splitIdx); - propertyKeyView.ToString(propertyKey); + propertyKeyView.ToString(propertyName); String propertyValue = new String(); StringView propertyValueView = value.Substring(splitIdx + 1, value.Length - splitIdx - 1); propertyValueView.ToString(propertyValue); - mCustomProperties.Add(propertyKey, propertyValue); + if (!CustomBuildProperties.TryAddProperty(propertyName, propertyValue)) + { + delete propertyName; + delete propertyValue; + return false; + } + return true; } } diff --git a/IDE/src/CustomBuildProperties.bf b/IDE/src/CustomBuildProperties.bf index 2bcd8ec3..5cb76865 100644 --- a/IDE/src/CustomBuildProperties.bf +++ b/IDE/src/CustomBuildProperties.bf @@ -61,11 +61,12 @@ namespace IDE mProjects.Clear(); } - static public void Load() + static public void Load(bool clearExistingProperties = true) { const char8* PROPERTIES_STR = "Properties"; - Clear(); + if (clearExistingProperties) + Clear(); String propertiesFileName = scope String(); GetFileName(propertiesFileName); @@ -85,22 +86,31 @@ namespace IDE for (var property in data.Enumerate(PROPERTIES_STR)) { - String propertyStr = new String(); - property.ToString(propertyStr); + String propertyName = new String(); + property.ToString(propertyName); - if (Contains(propertyStr)) + if (Contains(propertyName)) { - delete propertyStr; + delete propertyName; continue; } String propertyValue = new String(); data.GetCurString(propertyValue); - mProperties.Add(propertyStr, propertyValue); + TryAddProperty(propertyName, propertyValue); } } + static public bool TryAddProperty(String propertyName, String propertyValue) + { + if (Contains(propertyName)) + return false; + + mProperties.Add(propertyName, propertyValue); + return true; + } + static public bool Contains(String property) { return mProperties.ContainsKey(property); diff --git a/IDE/src/IDEApp.bf b/IDE/src/IDEApp.bf index 95b6bc02..509480e9 100644 --- a/IDE/src/IDEApp.bf +++ b/IDE/src/IDEApp.bf @@ -987,6 +987,7 @@ namespace IDE mWorkspace.mName = new String(); Path.GetFileName(mWorkspace.mDir, mWorkspace.mName); + CustomBuildProperties.Load(); LoadWorkspace(.OpenOrNew); FinishShowingNewWorkspace(); } @@ -2258,18 +2259,6 @@ namespace IDE outResult.Append(mInstallDir, "/DefaultLayout.toml"); } - void GetPropertiesFileName(String outResult) - { - String workspaceDir = scope String(); - - if (mWorkspace.mDir == null) - Directory.GetCurrentDirectory(workspaceDir); - else - workspaceDir = mWorkspace.mDir; - - outResult.Append(workspaceDir, "/BeefProperties.toml"); - } - bool GetWorkspaceFileName(String outResult) { if (mWorkspace.mDir == null) @@ -2973,8 +2962,6 @@ namespace IDE { scope AutoBeefPerf("IDEApp.LoadWorkspace"); - CustomBuildProperties.Load(); - AddRecentFile(.OpenedWorkspace, mWorkspace.mDir); StructuredData data = null; @@ -3149,15 +3136,6 @@ namespace IDE LoadFailed(); continue; } - else if (projSpec.mVerSpec case .Path(let projPath)) - { - String resolvedProjPath = scope String(); - if (gApp.ResolveConfigString(null, null, null, null, projPath, "custom properties", resolvedProjPath)) - { - projPath.Clear(); - projPath.Append(resolvedProjPath); - } - } switch (AddProject(projectName, projSpec.mVerSpec)) { @@ -3207,6 +3185,7 @@ namespace IDE CloseWorkspace(); mWorkspace.mDir = new String(workspaceDir); mWorkspace.mName = new String(workspaceName); + CustomBuildProperties.Load(); LoadWorkspace(.Open); FinishShowingNewWorkspace(); } diff --git a/IDE/src/Project.bf b/IDE/src/Project.bf index d98a4ce1..d2b82f6b 100644 --- a/IDE/src/Project.bf +++ b/IDE/src/Project.bf @@ -1041,11 +1041,6 @@ namespace IDE data.GetString("FileVersion", mFileVersion); data.GetString("ProductVersion", mProductVersion); String resolvedProductVersion = scope String(); - if (gApp.ResolveConfigString(null, null, null, null, mProductVersion, "custom properties", resolvedProductVersion)) - { - mProductVersion.Clear(); - mProductVersion.Append(resolvedProductVersion); - } } public void Serialize(StructuredData data) diff --git a/IDE/src/ui/NewProjectDialog.bf b/IDE/src/ui/NewProjectDialog.bf index 773b36ef..89345e28 100644 --- a/IDE/src/ui/NewProjectDialog.bf +++ b/IDE/src/ui/NewProjectDialog.bf @@ -143,6 +143,7 @@ namespace IDE.ui app.mWorkspace.mDir = new String(projDirectory); app.mWorkspace.mName = new String(projName); + CustomBuildProperties.Load(); app.[Friend]LoadWorkspace(.OpenOrNew); app.[Friend]FinishShowingNewWorkspace(false);