Skip to content

Commit

Permalink
Merge pull request #147 from conan-io/release/1.2.0
Browse files Browse the repository at this point in the history
Release 1.2.0
SSE4 authored Jul 25, 2019
2 parents 758a734 + 559f4ad commit 048b215
Showing 72 changed files with 253 additions and 3,372 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@
UpgradeLog.htm
obj/
bin/
Conan.VisualStudio.Examples/**/x64/

*.user
.conan/
@@ -17,3 +18,4 @@ bin/
*.iobj
*.ipdb
*.exe
*.db
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -14,6 +14,19 @@ download in the
These are the changes to each version that has been released
on the official Visual Studio extension gallery.

## 1.2.0

**2019-07-22**

- Add all available options for 'build_policy' according to Conan documentation ([#142](https://github.com/conan-io/conan-vs-extension/pull/142))
- Validate path to Conan executable ([#136](https://github.com/conan-io/conan-vs-extension/pull/136))
- Add configuration option to customize installation directory ([#134](https://github.com/conan-io/conan-vs-extension/pull/134))
- Capture any unhandled error during install command ([#126](https://github.com/conan-io/conan-vs-extension/pull/126))
- Capture errors from Conan and log them to output window and log file ([#125](https://github.com/conan-io/conan-vs-extension/pull/125))
- New version pattern: "major.minor.patch.build" ([#122](https://github.com/conan-io/conan-vs-extension/pull/122))
- Remove 'conan-vs-settings.json' feature. ([#121](https://github.com/conan-io/conan-vs-extension/pull/121))


## 1.1.0

**2019-06-27**
35 changes: 34 additions & 1 deletion Conan.VisualStudio.Core/ConanPathHelper.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
@@ -23,6 +25,37 @@ public static string GetRelativePath(string baseDirectory, string location)
var relativeUri = baseUri.MakeRelativeUri(locationUri);
return Uri.UnescapeDataString(relativeUri.ToString()).Replace('/', Path.DirectorySeparatorChar);
}
public static bool ValidateConanExecutable(string exe, out string errorMessage)
{
errorMessage = null;
if (exe == null || exe == "")
return true;
try
{
var startInfo = new ProcessStartInfo
{
FileName = exe,
Arguments = "--version",
UseShellExecute = false,
RedirectStandardInput = true,
RedirectStandardOutput = true,
CreateNoWindow = true
};
var process = Process.Start(startInfo);

process.WaitForExit();

if (0 != process.ExitCode)
errorMessage = $"invalid conan executable {exe}: conan --version failed with error {process.ExitCode}";

return 0 == process.ExitCode;
}
catch (Win32Exception e)
{
errorMessage = $"invalid conan executable {exe}: {e.Message}";
return false;
}
}

public static string DetermineConanPathFromEnvironment()
{
@@ -36,7 +69,7 @@ public static string DetermineConanPathFromEnvironment()
{
var fileName = Path.ChangeExtension("conan", extension);
var filePath = Path.Combine(directory, fileName);
if (File.Exists(filePath))
if (File.Exists(filePath) && ValidateConanExecutable(filePath, out string errorMessage))
{
// to get the proper file name case:
return Directory.GetFiles(directory, fileName).Single();
72 changes: 23 additions & 49 deletions Conan.VisualStudio.Core/ConanRunner.cs
Original file line number Diff line number Diff line change
@@ -7,19 +7,34 @@ namespace Conan.VisualStudio.Core
{
public class ConanRunner
{
private readonly ConanSettings _conanSettings;
private readonly string _executablePath;

public ConanRunner(ConanSettings conanSettings, string executablePath)
public ConanRunner(string executablePath)
{
_conanSettings = conanSettings;
_executablePath = executablePath;
}

private string Escape(string arg) =>
arg.Contains(" ") ? $"\"{arg}\"" : arg;

public Task<Process> Install(ConanProject project, ConanConfiguration configuration, ConanGeneratorType generator, ConanBuildType build, bool update, Core.IErrorListService errorListService)
private string BuildOptions(ConanBuildType build, bool update)
{
string options = "";
if (build != ConanBuildType.none)
{
if (build == ConanBuildType.always)
options += " --build";
else
options += " --build=" + build.ToString();
}
if (update)
{
options += " --update";
}
return options;
}

public ProcessStartInfo Install(ConanProject project, ConanConfiguration configuration, ConanGeneratorType generator, ConanBuildType build, bool update, Core.IErrorListService errorListService)
{
string ProcessArgument(string name, string value) => $"-s {name}={Escape(value)}";

@@ -29,28 +44,13 @@ public Task<Process> Install(ConanProject project, ConanConfiguration configurat
if (profile != null)
{
string generatorName = generator.ToString();
string options = "";
if (build != ConanBuildType.none)
{
options += " --build " + build.ToString();
}
if (update)
{
options += " --update";
}

arguments = $"install {Escape(project.Path)} " +
$"-g {generatorName} " +
$"--install-folder {Escape(configuration.InstallPath)} " +
$"--profile {Escape(profile)}" +
$"{options}";
$"{BuildOptions(build, update)}";

}
else if (_conanSettings != null)
{
var installConfig = _conanSettings.ConanCommands.FirstOrDefault(c => c.Name.Equals("install"));
arguments = installConfig.Args;
}
else
{
string generatorName = generator.ToString();
@@ -65,16 +65,6 @@ public Task<Process> Install(ConanProject project, ConanConfiguration configurat
{
settingValues = settingValues.Concat(new[] { ("compiler.runtime", configuration.RuntimeLibrary) }).ToArray();
}
string options = "";
if (build != ConanBuildType.none)
{
options += "--build " + build.ToString();
}

if (update)
{
options += " --update";
}

var settings = string.Join(" ", settingValues.Where(pair => pair.Item2 != null).Select(pair =>
{
@@ -84,7 +74,7 @@ public Task<Process> Install(ConanProject project, ConanConfiguration configurat
arguments = $"install {Escape(project.Path)} " +
$"-g {generatorName} " +
$"--install-folder {Escape(configuration.InstallPath)} " +
$"{settings} {options}";
$"{settings} {BuildOptions(build, update)}";
}

var startInfo = new ProcessStartInfo
@@ -94,26 +84,10 @@ public Task<Process> Install(ConanProject project, ConanConfiguration configurat
UseShellExecute = false,
WorkingDirectory = Path.GetDirectoryName(project.Path),
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
};
return Task.Run(() => Process.Start(startInfo));
}

public Task<Process> Inspect(ConanProject project)
{
var path = project.Path;
var arguments = $"inspect {Escape(path)} -a name -j";

var startInfo = new ProcessStartInfo
{
FileName = _executablePath,
Arguments = arguments,
UseShellExecute = false,
WorkingDirectory = Path.GetDirectoryName(path),
RedirectStandardOutput = true,
CreateNoWindow = true
};
return Task.Run(() => Process.Start(startInfo));
return startInfo;
}
}
}
8 changes: 5 additions & 3 deletions Conan.VisualStudio.Core/ConanSettings.cs
Original file line number Diff line number Diff line change
@@ -21,9 +21,11 @@ public enum ConanGeneratorType

public enum ConanBuildType
{
none,
missing,
always,
outdated
never,
missing,
cascade,
outdated,
none
}
}
12 changes: 0 additions & 12 deletions Conan.VisualStudio.Tests/Conan.VisualStudio.Tests.csproj
Original file line number Diff line number Diff line change
@@ -63,7 +63,6 @@
<Compile Include="Core\ConanPathHelperTests.cs" />
<Compile Include="JsonUtils.cs" />
<Compile Include="FileSystemUtils.cs" />
<Compile Include="OpenFolder\TaskVsTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ResourceUtils.cs" />
</ItemGroup>
@@ -81,9 +80,6 @@
<ItemGroup>
<None Include="app.config" />
<None Include="Key.snk" />
<None Include="OpenFolder\TestData\conan.vs.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="packages.config">
<SubType>Designer</SubType>
</None>
@@ -96,7 +92,6 @@
<None Include="Resources\FakeProject.vcxproj">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="OpenFolder\TestData\tasks.vs.json" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Conan.VisualStudio.Core\Conan.VisualStudio.Core.csproj">
@@ -107,10 +102,6 @@
<Project>{6fbebc9c-6e86-4588-bcda-83ac909c7eac}</Project>
<Name>Conan.VisualStudio</Name>
</ProjectReference>
<ProjectReference Include="..\VisualStudio.OpenFolder\VisualStudio.OpenFolder.csproj">
<Project>{232a6411-5acd-49d0-b5b0-1f72b265b7d1}</Project>
<Name>VisualStudio.OpenFolder</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Folder Include="Menu\" />
@@ -128,9 +119,6 @@
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Content Include="OpenFolder\TestData\conanfile.txt" />
</ItemGroup>
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
10 changes: 5 additions & 5 deletions Conan.VisualStudio.Tests/Core/ConanPathHelperTests.cs
Original file line number Diff line number Diff line change
@@ -24,7 +24,7 @@ public void ConanPathIsDeterminedAutomatically()
{
var directory = FileSystemUtils.CreateTempDirectory();
const string extension = ".cmd";
var conanShim = FileSystemUtils.CreateTempFile(directory, "conan" + extension);
var conanShim = FileSystemUtils.CreateTempFile(directory, "conan" + extension, "exit 0");

Environment.SetEnvironmentVariable("PATH", directory);
Environment.SetEnvironmentVariable("PATHEXT", extension);
@@ -36,16 +36,16 @@ public void ConanPathIsDeterminedAutomatically()
public void PathDeterminerRespectPathExtOrder()
{
var directory = FileSystemUtils.CreateTempDirectory();
var comShim = FileSystemUtils.CreateTempFile(directory, "conan.com");
var comShim = FileSystemUtils.CreateTempFile(directory, "conan.cmd", "exit 0");
FileSystemUtils.CreateTempFile(directory, "conan.exe");
var batShim = FileSystemUtils.CreateTempFile(directory, "conan.bat");
var batShim = FileSystemUtils.CreateTempFile(directory, "conan.bat", "exit 0");

Environment.SetEnvironmentVariable("PATH", directory);

Environment.SetEnvironmentVariable("PATHEXT", ".COM;.EXE;.BAT");
Environment.SetEnvironmentVariable("PATHEXT", ".CMD;.EXE;.BAT");
Assert.AreEqual(comShim, ConanPathHelper.DetermineConanPathFromEnvironment());

Environment.SetEnvironmentVariable("PATHEXT", ".BAT;.EXE;.COM");
Environment.SetEnvironmentVariable("PATHEXT", ".BAT;.EXE;.CMD");
Assert.AreEqual(batShim, ConanPathHelper.DetermineConanPathFromEnvironment());
}

7 changes: 5 additions & 2 deletions Conan.VisualStudio.Tests/FileSystemUtils.cs
Original file line number Diff line number Diff line change
@@ -14,10 +14,13 @@ public static string CreateTempDirectory()
return path;
}

public static string CreateTempFile(string directory, string name)
public static string CreateTempFile(string directory, string name, string contents = "")
{
var path = Path.Combine(directory, name);
File.Create(path).Close();
FileStream f = File.Create(path);
byte[] info = new UTF8Encoding(true).GetBytes(contents);
f.Write(info, 0, info.Length);
f.Close();
return path;
}

21 changes: 0 additions & 21 deletions Conan.VisualStudio.Tests/OpenFolder/TaskVsTests.cs

This file was deleted.

10 changes: 0 additions & 10 deletions Conan.VisualStudio.Tests/OpenFolder/TestData/conan.vs.json

This file was deleted.

5 changes: 0 additions & 5 deletions Conan.VisualStudio.Tests/OpenFolder/TestData/conanfile.txt

This file was deleted.

17 changes: 0 additions & 17 deletions Conan.VisualStudio.Tests/OpenFolder/TestData/tasks.vs.json

This file was deleted.

Loading

0 comments on commit 048b215

Please sign in to comment.