/// <summary> /// Load the operation state from the provided directory /// </summary> public static bool TryLoadState( Path operationGraphFile, FileSystemState fileSystemState, out OperationGraph result) { // Verify the requested file exists if (!System.IO.File.Exists(operationGraphFile.ToString())) { Log.Info("Operation graph file does not exist"); result = new OperationGraph(); return(false); } // Open the file to read from using (var fileStream = System.IO.File.OpenRead(operationGraphFile.ToString())) using (var reader = new System.IO.BinaryReader(fileStream)) { // Read the contents of the build state file try { var loadedResult = OperationGraphReader.Deserialize(reader); // Map up the incoming file ids to the active file system state ids var activeFileIdMap = new Dictionary <FileId, FileId>(); for (var i = 0; i < loadedResult.GetReferencedFiles().Count; i++) { var fileReference = loadedResult.GetReferencedFiles()[i]; var activeFileId = fileSystemState.ToFileId(fileReference.Path); activeFileIdMap.Add(fileReference.FileId, activeFileId); // Update the referenced id fileReference.FileId = activeFileId; } // Update all of the operations foreach (var operationReference in loadedResult.GetOperations()) { var operation = operationReference.Value; UpdateFileIds(operation.DeclaredInput, activeFileIdMap); UpdateFileIds(operation.DeclaredOutput, activeFileIdMap); UpdateFileIds(operation.ObservedInput, activeFileIdMap); UpdateFileIds(operation.ObservedOutput, activeFileIdMap); } result = loadedResult; return(true); } catch { Log.Error("Failed to parse operation graph"); result = new OperationGraph(); return(false); } } }