Skip to content

Commit 4bf7bb7

Browse files
committed
Make nongraph buildparameters per project for binlogs
1 parent 4925d20 commit 4bf7bb7

File tree

2 files changed

+151
-48
lines changed

2 files changed

+151
-48
lines changed

src/Ionide.ProjInfo/ProjectLoader2.fs

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,11 @@ module GraphBuildResult =
150150
/// Uses <see cref="T:Microsoft.Build.Execution.BuildManager"/> to run builds.
151151
/// This should be treated as a singleton because the BuildManager only allows one build request running at a time.
152152
/// </summary>
153-
type BuildManagerSession(?bm: BuildManager, ?buildParameters: BuildParameters) =
153+
type BuildManagerSession(?bm: BuildManager) =
154154
let locker = BuildManagerSession.locker
155155
let bm = defaultArg bm BuildManager.DefaultBuildManager
156-
let buildParameters = defaultArg buildParameters (BuildParameters(Loggers = [ ProjectLoader.ErrorLogger() ]))
157156

158-
let tryGetErrorLogs () =
157+
let tryGetErrorLogs (buildParameters: BuildParameters) =
159158
buildParameters.Loggers
160159
|> Seq.tryPick (
161160
function
@@ -166,33 +165,34 @@ type BuildManagerSession(?bm: BuildManager, ?buildParameters: BuildParameters) =
166165
|> Seq.collect (fun e -> e.Errors)
167166
|> Seq.toList
168167

169-
let lockAndStartBuild (ct: CancellationToken) (a: unit -> Task<_>) =
168+
let lockAndStartBuild (ct: CancellationToken) buildParameters (a: unit -> Task<_>) =
170169
task {
171170
use! _lock = locker.LockAsync ct
172171
use _ = bm.StartBuild(buildParameters, ct)
173172
return! a ()
174173
}
175174

176-
member private x.determineBuildOutput<'e when BuildResultFailure<'e>>(result: BuildResult) =
175+
member private x.determineBuildOutput<'e when BuildResultFailure<'e>>(buildParameters, result: BuildResult) =
177176
match result.OverallResult with
178177
| BuildResultCode.Success -> Ok result
179-
| _ -> Error('e.BuildFailure(result, tryGetErrorLogs ()))
178+
| _ -> Error('e.BuildFailure(result, tryGetErrorLogs buildParameters))
180179

181180

182-
member private x.determineGraphBuildOutput<'e when GraphBuildResultFailure<'e>>(result: GraphBuildResult) =
181+
member private x.determineGraphBuildOutput<'e when GraphBuildResultFailure<'e>>(buildParameters, result: GraphBuildResult) =
183182
match result.OverallResult with
184183
| BuildResultCode.Success -> Ok result
185-
| _ -> Error('e.BuildFailure(result, tryGetErrorLogs ()))
184+
| _ -> Error('e.BuildFailure(result, tryGetErrorLogs buildParameters))
186185

187186

188187
/// <summary>Submits a graph build request to the current build and starts it asynchronously.</summary>
189188
/// <param name="buildRequest">GraphBuildRequestData encapsulates all of the data needed to submit a graph build request.</param>
190189
/// <param name="ct">CancellationToken to cancel build submissions.</param>
191190
/// <returns>The BuildResult</returns>
192-
member x.BuildAsync(buildRequest: BuildRequestData, ?ct: CancellationToken) =
191+
member x.BuildAsync(buildRequest: BuildRequestData, ?buildParameters: BuildParameters, ?ct: CancellationToken) =
193192
let ct = defaultArg ct CancellationToken.None
193+
let buildParameters = defaultArg buildParameters (BuildParameters(Loggers = [ ProjectLoader.ErrorLogger() ]))
194194

195-
lockAndStartBuild ct
195+
lockAndStartBuild ct buildParameters
196196
<| fun () ->
197197
task {
198198
let tcs = TaskCompletionSource<_> TaskCreationOptions.RunContinuationsAsynchronously
@@ -204,7 +204,7 @@ type BuildManagerSession(?bm: BuildManager, ?buildParameters: BuildParameters) =
204204
let result = sub.BuildResult
205205

206206
match result.Exception with
207-
| null -> tcs.SetResult(x.determineBuildOutput result)
207+
| null -> tcs.SetResult(x.determineBuildOutput (buildParameters, result))
208208
| :? Microsoft.Build.Exceptions.BuildAbortedException when ct.IsCancellationRequested -> tcs.SetCanceled ct
209209
| e -> tcs.SetException e
210210
),
@@ -218,10 +218,11 @@ type BuildManagerSession(?bm: BuildManager, ?buildParameters: BuildParameters) =
218218
/// <param name="graphBuildRequest">GraphBuildRequestData encapsulates all of the data needed to submit a graph build request.</param>
219219
/// <param name="ct">CancellationToken to cancel build submissions.</param>
220220
/// <returns>the GraphBuildResult</returns>
221-
member x.BuildAsync(graphBuildRequest: GraphBuildRequestData, ?ct: CancellationToken) =
221+
member x.BuildAsync(graphBuildRequest: GraphBuildRequestData, ?buildParameters: BuildParameters, ?ct: CancellationToken) =
222222
let ct = defaultArg ct CancellationToken.None
223+
let buildParameters = defaultArg buildParameters (BuildParameters(Loggers = [ ProjectLoader.ErrorLogger() ]))
223224

224-
lockAndStartBuild ct
225+
lockAndStartBuild ct buildParameters
225226
<| fun () ->
226227
task {
227228
let tcs = TaskCompletionSource<_> TaskCreationOptions.RunContinuationsAsynchronously
@@ -234,7 +235,7 @@ type BuildManagerSession(?bm: BuildManager, ?buildParameters: BuildParameters) =
234235
let result = sub.BuildResult
235236

236237
match result.Exception with
237-
| null -> tcs.SetResult(x.determineGraphBuildOutput result)
238+
| null -> tcs.SetResult(x.determineGraphBuildOutput (buildParameters, result))
238239
| :? Microsoft.Build.Exceptions.BuildAbortedException when ct.IsCancellationRequested -> tcs.SetCanceled ct
239240
| e -> tcs.SetException e
240241

@@ -361,7 +362,7 @@ type ProjectLoader2 =
361362

362363
ProjectLoader2.EvaluateAsGraph(projects, ?projectCollection = projectCollection, ?projectInstanceFactory = projectInstanceFactory)
363364

364-
static member Execution(session: BuildManagerSession, graph: ProjectGraph, ?targetsToBuild: string array, ?flags: BuildRequestDataFlags, ?ct: CancellationToken) =
365+
static member Execution(session: BuildManagerSession, graph: ProjectGraph, ?buildParameters: BuildParameters, ?targetsToBuild: string array, ?flags: BuildRequestDataFlags, ?ct: CancellationToken) =
365366
task {
366367
let targetsToBuild = defaultArg targetsToBuild (ProjectLoader.designTimeBuildTargets false)
367368

@@ -370,10 +371,10 @@ type ProjectLoader2 =
370371
let request =
371372
GraphBuildRequestData(projectGraph = graph, targetsToBuild = targetsToBuild, hostServices = null, flags = flags)
372373

373-
return! session.BuildAsync(request, ?ct = ct)
374+
return! session.BuildAsync(request, ?buildParameters = buildParameters, ?ct = ct)
374375
}
375376

376-
static member Execution(session: BuildManagerSession, projectInstance: ProjectInstance, ?targetsToBuild: string array, ?flags: BuildRequestDataFlags, ?ct: CancellationToken) =
377+
static member Execution(session: BuildManagerSession, projectInstance: ProjectInstance, ?buildParameters: BuildParameters, ?targetsToBuild: string array, ?flags: BuildRequestDataFlags, ?ct: CancellationToken) =
377378
task {
378379
let targetsToBuild = defaultArg targetsToBuild (ProjectLoader.designTimeBuildTargets false)
379380

@@ -382,18 +383,18 @@ type ProjectLoader2 =
382383
let request =
383384
BuildRequestData(projectInstance = projectInstance, targetsToBuild = targetsToBuild, hostServices = null, flags = flags)
384385

385-
return! session.BuildAsync(request, ?ct = ct)
386+
return! session.BuildAsync(request, ?buildParameters = buildParameters, ?ct = ct)
386387
}
387388

388-
static member Execution(session: BuildManagerSession, projectInstances: ProjectInstance seq, ?targetsToBuild: string array, ?flags: BuildRequestDataFlags, ?ct: CancellationToken) =
389+
static member Execution(session: BuildManagerSession, projectInstances: (ProjectInstance * BuildParameters option) seq, ?targetsToBuild: string array, ?flags: BuildRequestDataFlags, ?ct: CancellationToken) =
389390
projectInstances
390-
|> Seq.map (fun p -> ProjectLoader2.Execution(session, p, ?targetsToBuild = targetsToBuild, ?flags = flags, ?ct = ct))
391+
|> Seq.map (fun (p, bp) -> ProjectLoader2.Execution(session, p, ?buildParameters = bp, ?targetsToBuild = targetsToBuild, ?flags = flags, ?ct = ct))
391392
|> Task.WhenAll
392393

393-
static member Execution(session: BuildManagerSession, projects: Project seq, ?targetsToBuild: string array, ?flags: BuildRequestDataFlags, ?ct: CancellationToken) =
394+
static member Execution(session: BuildManagerSession, projects: (Project * BuildParameters option) seq, ?targetsToBuild: string array, ?flags: BuildRequestDataFlags, ?ct: CancellationToken) =
394395
let instances =
395396
projects
396-
|> Seq.map (fun p -> p.CreateProjectInstance())
397+
|> Seq.map (fun (p, bp) -> p.CreateProjectInstance(), bp)
397398

398399
ProjectLoader2.Execution(session, instances, ?targetsToBuild = targetsToBuild, ?flags = flags, ?ct = ct)
399400

0 commit comments

Comments
 (0)