public bool TryWriteMultiPackIndex(ITracer tracer, GVFSEnlistment enlistment, PhysicalFileSystem fileSystem) { using (ITracer activity = tracer.StartActivity(nameof(this.TryWriteMultiPackIndex), EventLevel.Informational, Keywords.Telemetry, metadata: null)) { GitProcess process = new GitProcess(enlistment); GitProcess.Result result = process.WriteMultiPackIndex(enlistment.GitPackRoot); if (!result.HasErrors) { string midxHash = result.Output.Trim(); activity.RelatedInfo("Updated midx-head to hash {0}", midxHash); string expectedMidxHead = Path.Combine(enlistment.GitPackRoot, "midx-" + midxHash + ".midx"); List <string> midxFiles = new List <string>(); midxFiles.AddRange(fileSystem.GetFiles(enlistment.GitPackRoot, "midx-*.midx")); midxFiles.AddRange(fileSystem.GetFiles(enlistment.GitPackRoot, "tmp_midx_*")); foreach (string midxFile in midxFiles) { if (!midxFile.Equals(expectedMidxHead, StringComparison.OrdinalIgnoreCase) && !fileSystem.TryDeleteFile(midxFile)) { activity.RelatedWarning("Failed to delete MIDX file {0}", midxFile); } } } else { EventMetadata errorMetadata = new EventMetadata(); errorMetadata.Add("Operation", nameof(this.TryWriteMultiPackIndex)); errorMetadata.Add("packDir", enlistment.GitPackRoot); errorMetadata.Add("Errors", result.Errors); errorMetadata.Add("Output", result.Output.Length > 1024 ? result.Output.Substring(1024) : result.Output); activity.RelatedError(errorMetadata, result.Errors, Keywords.Telemetry); } return(!result.HasErrors); } }