diff --git a/src/Terrabuild/Core/Build.fs b/src/Terrabuild/Core/Build.fs index 5485e21e..84211235 100644 --- a/src/Terrabuild/Core/Build.fs +++ b/src/Terrabuild/Core/Build.fs @@ -16,6 +16,7 @@ type TaskRequest = type TaskStatus = | Success of completionDate:DateTime | Failure of completionDate:DateTime * message:string + | Pending [] type NodeInfo = { @@ -288,10 +289,9 @@ let run (options: ConfigOptions.Options) (cache: Cache.ICache) (api: Contracts.I TaskRequest.Build, buildNode() - let scheduledNodes = Concurrent.ConcurrentDictionary() let hub = Hub.Create(options.MaxConcurrency) let rec schedule nodeId = - if scheduledNodes.TryAdd(nodeId, true) then + if nodeResults.TryAdd(nodeId, (TaskRequest.Build, TaskStatus.Pending)) then let node = graph.Nodes[nodeId] let nodeComputed = hub.GetSignal nodeId @@ -312,7 +312,7 @@ let run (options: ConfigOptions.Options) (cache: Cache.ICache) (api: Contracts.I let buildRequest, completionStatus = processNode maxCompletionChildren node Log.Debug("{NodeId} completed request {Request} with status {Status}", node.Id, buildRequest, completionStatus) - nodeResults.TryAdd(node.Id, (buildRequest, completionStatus)) |> ignore + nodeResults[node.Id] <- (buildRequest, completionStatus) match completionStatus with | TaskStatus.Success completionDate -> @@ -324,7 +324,7 @@ let run (options: ConfigOptions.Options) (cache: Cache.ICache) (api: Contracts.I exn -> Log.Fatal(exn, "{NodeId} unexpected failure while building", node.Id) - nodeResults.TryAdd(node.Id, (TaskRequest.Build, TaskStatus.Failure (DateTime.UtcNow, exn.Message))) |> ignore + nodeResults[node.Id] <- (TaskRequest.Build, TaskStatus.Failure (DateTime.UtcNow, exn.Message)) notification.NodeCompleted node TaskRequest.Build false reraise() diff --git a/src/Terrabuild/Core/Logs.fs b/src/Terrabuild/Core/Logs.fs index 2bf14138..7a7ea22d 100644 --- a/src/Terrabuild/Core/Logs.fs +++ b/src/Terrabuild/Core/Logs.fs @@ -7,7 +7,8 @@ module Iconography = let restore_ko = Ansi.Emojis.pretzel let build_ok = Ansi.Emojis.green_checkmark let build_ko = Ansi.Emojis.red_cross - let task_pending = Ansi.Emojis.bang_mark + let task_pending = Ansi.Emojis.construction + let task_unknown = Ansi.Emojis.bang_mark let dumpLogs (logId: Guid) (options: ConfigOptions.Options) (cache: ICache) (graph: GraphDef.Graph) (summary: Build.Summary) = @@ -35,7 +36,8 @@ let dumpLogs (logId: Guid) (options: ConfigOptions.Options) (cache: ICache) (gra | Build.TaskRequest.Restore, Build.TaskStatus.Failure _ -> Iconography.restore_ko | Build.TaskRequest.Build, Build.TaskStatus.Success _ -> Iconography.build_ok | Build.TaskRequest.Build, Build.TaskStatus.Failure _ -> Iconography.build_ko - | _ -> Iconography.task_pending + | _ -> Iconography.task_pending + | _ -> Iconography.task_unknown let dumpMarkdown (node: GraphDef.Node) = let header = @@ -213,7 +215,7 @@ let dumpLogs (logId: Guid) (options: ConfigOptions.Options) (cache: ICache) (gra fun nodes -> options.LogTypes |> List.iter (dump nodes) let sortedNodes = - graph.Nodes + summary.Nodes |> Map.map (fun nodeId _ -> graph.Nodes[nodeId]) |> Seq.map (fun (KeyValue(_, node)) -> node) |> Seq.sortBy (fun node -> match summary.Nodes |> Map.tryFind node.Id with @@ -221,6 +223,7 @@ let dumpLogs (logId: Guid) (options: ConfigOptions.Options) (cache: ICache) (gra match nodeInfo.Status with | Build.TaskStatus.Success completionDate -> completionDate | Build.TaskStatus.Failure (completionDate, _) -> completionDate + | _ -> DateTime.MaxValue | _ -> DateTime.MaxValue) |> List.ofSeq