Skip to content
Closed
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
10 changes: 10 additions & 0 deletions Record.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Record

## fixed

- support relative path
- save config settings

## unfixed

- icon(not necessary)
40 changes: 38 additions & 2 deletions VSPackage/OpenCppCoverageCmdLine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@

using OpenCppCoverage.VSPackage.Settings;
using System.Collections.Generic;
using System.IO;
using System.Linq;

using System.Text.RegularExpressions;

namespace OpenCppCoverage.VSPackage
{
class OpenCppCoverageCmdLine
Expand Down Expand Up @@ -127,7 +129,7 @@ static void AppendMiscellaneousSettings(
MiscellaneousSettings settings)
{
if (!string.IsNullOrWhiteSpace(settings.OptionalConfigFile))
builder.AppendArgument(ConfigFileFlag, settings.OptionalConfigFile);
builder.AppendArgument(ConfigFileFlag, CovertToDirectPath(settings.OptionalConfigFile));

switch (settings.LogTypeValue)
{
Expand All @@ -142,6 +144,40 @@ static void AppendMiscellaneousSettings(

if (settings.ContinueAfterCppExceptions)
builder.AppendArgument(ContinueAfterCppExceptionFlag, null);
}

//---------------------------------------------------------------------
static string CovertToDirectPath(string path)
{
string content = "";
using (StreamReader reader = new StreamReader(path))
{
string line;
while ((line = reader.ReadLine()) != null)
content += line + "\r\n";
}

// change current directory and replace relative path to direct path, write to new config file and return it.
string oldDirectory = Directory.GetCurrentDirectory();
string configDirectory = Path.GetDirectoryName(path);
string newConfigFile = configDirectory + @"\tmp.txt";
Directory.SetCurrentDirectory(configDirectory);

foreach (Match match in Regex.Matches(content, @"=(.*)\r\n"))
{
string dict = match.Groups[1].Value;
string ndict = Path.GetFullPath(dict);
content = content.Replace(dict, ndict);
}

using (StreamWriter writer = new StreamWriter(newConfigFile))
{
writer.Write(content);
writer.Flush();
}

Directory.SetCurrentDirectory(oldDirectory);
return newConfigFile;
}

//---------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion VSPackage/Settings/MainSettingsManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void ShowSettingsWindows(

window.Controller.StartUpProjectSettingsBuilder = settingsBuilder;
window.Controller.CoverageRunner = coverageRunner;
window.Controller.UpdateStartUpProject(kind);
window.Controller.UpdateSettings(kind);
var frame = (IVsWindowFrame)window.Frame;

Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(frame.Show());
Expand Down
2 changes: 1 addition & 1 deletion VSPackage/Settings/UI/BasicSettingController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ void OnToggleSelectAll()
}

//---------------------------------------------------------------------
public IEnumerable<KeyValuePair<string, string>> EnvironmentVariables { get; private set; }
public IEnumerable<KeyValuePair<string, string>> EnvironmentVariables { get; set; }
public ICommand ToggleSelectAllCommand { get; }
}
}
66 changes: 59 additions & 7 deletions VSPackage/Settings/UI/MainSettingController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.

using GalaSoft.MvvmLight.Command;
using Newtonsoft.Json;
using OpenCppCoverage.VSPackage.Helper;
using System;
using System.IO;
using System.Windows.Controls;
using System.Windows.Input;

Expand Down Expand Up @@ -47,17 +49,67 @@ public MainSettingController(
public CoverageRunner CoverageRunner { get; set; }
public IStartUpProjectSettingsBuilder StartUpProjectSettingsBuilder { get; set; }

string settingsFile = "OpenCppCoverage.settings";

// for serialize
public class AllControllers
{
public BasicSettingController basicSettingController;
public FilterSettingController filterSettingController;
public ImportExportSettingController importExportSettingController;
public MiscellaneousSettingController miscellaneousSettingController;
}

//---------------------------------------------------------------------
public void SaveSettings()
{
File.WriteAllText(settingsFile, JsonConvert.SerializeObject(new AllControllers
{
basicSettingController = this.BasicSettingController,
filterSettingController = this.FilterSettingController,
importExportSettingController = this.ImportExportSettingController,
miscellaneousSettingController = this.MiscellaneousSettingController
}));
}

//---------------------------------------------------------------------
public void RecoverSettings(AllControllers allControllers)
{
this.BasicSettingController = allControllers.basicSettingController;
this.FilterSettingController = allControllers.filterSettingController;
this.ImportExportSettingController = allControllers.importExportSettingController;
this.MiscellaneousSettingController = allControllers.miscellaneousSettingController;
}

//---------------------------------------------------------------------
public void UpdateSettings(ProjectSelectionKind kind)
{
if (this.StartUpProjectSettingsBuilder == null)
throw new InvalidOperationException("StartUpProjectSettingsBuilder should be set.");

if (File.Exists(settingsFile))
{
AllControllers allControllers = JsonConvert.DeserializeObject<AllControllers>(File.ReadAllText(settingsFile));
if (allControllers.basicSettingController.CurrentProject.Equals(this.StartUpProjectSettingsBuilder.ComputeSettings(kind).ProjectName))
{
RecoverSettings(allControllers);
return;
}
}

UpdateStartUpProject(kind);
}

//---------------------------------------------------------------------
public void UpdateStartUpProject(ProjectSelectionKind kind)
{
if (this.StartUpProjectSettingsBuilder == null)
throw new InvalidOperationException("StartUpProjectSettingsBuilder should be set.");

var settings = this.StartUpProjectSettingsBuilder.ComputeSettings(kind);
this.BasicSettingController.UpdateStartUpProject(settings);
this.FilterSettingController.UpdateStartUpProject();
this.ImportExportSettingController.UpdateStartUpProject();
this.MiscellaneousSettingController.UpdateStartUpProject();

SaveSettings();
}

//---------------------------------------------------------------------
Expand All @@ -73,10 +125,10 @@ public MainSettings GetMainSettings()
}

//---------------------------------------------------------------------
public BasicSettingController BasicSettingController { get; }
public FilterSettingController FilterSettingController { get; }
public ImportExportSettingController ImportExportSettingController { get; }
public MiscellaneousSettingController MiscellaneousSettingController { get; }
public BasicSettingController BasicSettingController { get; set; }
public FilterSettingController FilterSettingController { get; set; }
public ImportExportSettingController ImportExportSettingController { get; set; }
public MiscellaneousSettingController MiscellaneousSettingController { get; set; }

//---------------------------------------------------------------------
string commandLineText;
Expand Down
2 changes: 2 additions & 0 deletions VSPackage/Settings/UI/SettingToolWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ void Close()
{
var frame = (IVsWindowFrame)this.Frame;
frame.CloseFrame((uint)__FRAMECLOSE.FRAMECLOSE_NoSave);

this.Controller.SaveSettings();
}
}
}
Loading