Include guid in build artifacts directory when --keepFiles is specified.

This commit is contained in:
Tim 2023-09-02 11:11:56 -04:00
Родитель ca5dfdf106
Коммит 58663f70d8
6 изменённых файлов: 18 добавлений и 13 удалений

Просмотреть файл

@ -23,7 +23,10 @@ namespace BenchmarkDotNet.Running
Resolver = resolver;
RepresentativeBenchmarkCase = benchmarks[0].BenchmarkCase;
Benchmarks = benchmarks;
ProgramName = benchmarks[0].Config.Options.IsSet(ConfigOptions.KeepBenchmarkFiles) ? RepresentativeBenchmarkCase.Job.FolderInfo : Guid.NewGuid().ToString();
var keepBenchmarkFiles = benchmarks[0].Config.Options.IsSet(ConfigOptions.KeepBenchmarkFiles);
var guid = Guid.NewGuid().ToString();
ProgramName = keepBenchmarkFiles ? RepresentativeBenchmarkCase.Job.FolderInfo : guid;
ProgramDirectory = keepBenchmarkFiles ? Path.Combine(RepresentativeBenchmarkCase.Job.FolderInfo, guid) : guid;
LogBuildOutput = benchmarks[0].Config.Options.IsSet(ConfigOptions.LogBuildOutput);
GenerateMSBuildBinLog = benchmarks[0].Config.Options.IsSet(ConfigOptions.GenerateMSBuildBinLog);
}
@ -32,6 +35,8 @@ namespace BenchmarkDotNet.Running
public string ProgramName { get; }
public string ProgramDirectory { get; }
/// <summary>
/// the benchmarks are grouped by the build settings
/// so you can use this benchmark to get the runtime settings

Просмотреть файл

@ -36,11 +36,11 @@ namespace BenchmarkDotNet.Toolchains.DotNetCli
/// we are limited by xprojs (by default compiles all .cs files in all subfolders, Program.cs could be doubled and fail the build)
/// and also by NuGet internal implementation like looking for global.json file in parent folders
/// </summary>
protected override string GetBuildArtifactsDirectoryPath(BuildPartition buildPartition, string programName)
protected override string GetBuildArtifactsDirectoryPath(BuildPartition buildPartition, string programDirectory)
{
if (GetSolutionRootDirectory(out var directoryInfo))
{
return Path.Combine(directoryInfo.FullName, programName);
return Path.Combine(directoryInfo.FullName, programDirectory);
}
// we did not find global.json or any Visual Studio solution file?
@ -48,7 +48,7 @@ namespace BenchmarkDotNet.Toolchains.DotNetCli
var parent = new DirectoryInfo(Directory.GetCurrentDirectory()).Parent;
if (parent == null)
throw new DirectoryNotFoundException("Parent directory for current directory");
return Path.Combine(parent.FullName, programName);
return Path.Combine(parent.FullName, programDirectory);
}
internal static bool GetSolutionRootDirectory(out DirectoryInfo directoryInfo)

Просмотреть файл

@ -42,7 +42,7 @@ namespace BenchmarkDotNet.Toolchains
/// <summary>
/// returns a path to the folder where auto-generated project and code are going to be placed
/// </summary>
[PublicAPI] protected abstract string GetBuildArtifactsDirectoryPath(BuildPartition assemblyLocation, string programName);
[PublicAPI] protected abstract string GetBuildArtifactsDirectoryPath(BuildPartition assemblyLocation, string programDirectory);
/// <summary>
/// returns a path where executable should be found after the build (usually \bin)
@ -128,10 +128,10 @@ namespace BenchmarkDotNet.Toolchains
// its not ".cs" in order to avoid VS from displaying and compiling it with xprojs/csprojs that include all *.cs by default
const string codeFileExtension = ".notcs";
string programName = buildPartition.ProgramName;
string buildArtifactsDirectoryPath = GetBuildArtifactsDirectoryPath(buildPartition, programName);
string buildArtifactsDirectoryPath = GetBuildArtifactsDirectoryPath(buildPartition, buildPartition.ProgramDirectory);
string binariesDirectoryPath = GetBinariesDirectoryPath(buildArtifactsDirectoryPath, buildPartition.BuildConfiguration);
string programName = buildPartition.ProgramName;
string executablePath = GetExecutablePath(binariesDirectoryPath, programName);
return new ArtifactsPaths(

Просмотреть файл

@ -60,10 +60,10 @@ namespace BenchmarkDotNet.Toolchains.NativeAot
protected override string GetExecutableExtension() => OsDetector.ExecutableExtension;
protected override string GetBuildArtifactsDirectoryPath(BuildPartition buildPartition, string programName)
protected override string GetBuildArtifactsDirectoryPath(BuildPartition buildPartition, string programDirectory)
=> useTempFolderForRestore
? Path.Combine(Path.GetTempPath(), programName) // store everything in temp to avoid collisions with IDE
: base.GetBuildArtifactsDirectoryPath(buildPartition, programName);
? Path.Combine(Path.GetTempPath(), programDirectory) // store everything in temp to avoid collisions with IDE
: base.GetBuildArtifactsDirectoryPath(buildPartition, programDirectory);
protected override string GetBinariesDirectoryPath(string buildArtifactsDirectoryPath, string configuration)
=> Path.Combine(buildArtifactsDirectoryPath, "bin", configuration, TargetFrameworkMoniker, runtimeIdentifier, "publish");

Просмотреть файл

@ -13,7 +13,7 @@ namespace BenchmarkDotNet.Toolchains.Roslyn
[PublicAPI]
public class Generator : GeneratorBase
{
protected override string GetBuildArtifactsDirectoryPath(BuildPartition buildPartition, string programName)
protected override string GetBuildArtifactsDirectoryPath(BuildPartition buildPartition, string programDirectory)
=> Path.GetDirectoryName(buildPartition.AssemblyLocation);
[PublicAPI]

Просмотреть файл

@ -220,9 +220,9 @@ namespace BenchmarkDotNet.Tests
private class SteamLoadedBuildPartition : CsProjGenerator
{
internal string ResolvePathForBinaries(BuildPartition buildPartition, string programName)
internal string ResolvePathForBinaries(BuildPartition buildPartition, string programDirectory)
{
return base.GetBuildArtifactsDirectoryPath(buildPartition, programName);
return base.GetBuildArtifactsDirectoryPath(buildPartition, programDirectory);
}
public SteamLoadedBuildPartition(string targetFrameworkMoniker, string cliPath, string packagesPath, string runtimeFrameworkVersion, bool isNetCore)