public void PerformDiff(string sourceTreeSha, string targetTreeSha) { EventMetadata metadata = new EventMetadata(); metadata.Add("TargetTreeSha", targetTreeSha); metadata.Add("HeadTreeSha", sourceTreeSha); using (ITracer activity = this.tracer.StartActivity("PerformDiff", EventLevel.Informational, Keywords.Telemetry, metadata)) { GitProcess git = new GitProcess(this.enlistment); metadata = new EventMetadata(); if (sourceTreeSha == null) { this.UpdatedWholeTree = true; // Nothing is checked out (fresh git init), so we must search the entire tree. git.LsTree( targetTreeSha, line => this.EnqueueOperationsFromLsTreeLine(activity, line), recursive: true, showAllTrees: true); metadata.Add("Operation", "LsTree"); } else { // Diff head and target, determine what needs to be done. git.DiffTree( sourceTreeSha, targetTreeSha, line => this.EnqueueOperationsFromDiffTreeLine(this.tracer, this.enlistment.EnlistmentRoot, line)); metadata.Add("Operation", "DiffTree"); } this.FlushStagedQueues(); metadata.Add("Success", !this.HasFailures); metadata.Add("DirectoryOperationsCount", this.TotalDirectoryOperations); metadata.Add("FileDeleteOperationsCount", this.TotalFileDeletes); metadata.Add("RequiredBlobsCount", this.RequiredBlobs.Count); activity.Stop(metadata); } }
public void PerformDiff() { using (GitCatFileBatchProcess catFile = new GitCatFileBatchProcess(this.enlistment)) { GitProcess git = new GitProcess(this.enlistment); string repoRoot = git.GetRepoRoot(); string targetTreeSha = catFile.GetTreeSha(this.targetCommitSha); string headTreeSha = catFile.GetTreeSha("HEAD"); EventMetadata metadata = new EventMetadata(); metadata.Add("TargetTreeSha", targetTreeSha); metadata.Add("HeadTreeSha", headTreeSha); using (ITracer activity = this.tracer.StartActivity("PerformDiff", EventLevel.Informational, metadata)) { metadata = new EventMetadata(); if (headTreeSha == null) { // Nothing is checked out (fresh git init), so we must search the entire tree. git.LsTree(targetTreeSha, this.EnqueueOperationsFromLsTreeLine, recursive: true, showAllTrees: true); metadata.Add("Operation", "LsTree"); } else { // Diff head and target, determine what needs to be done. git.DiffTree(headTreeSha, targetTreeSha, line => this.EnqueueOperationsFromDiffTreeLine(this.tracer, repoRoot, line)); metadata.Add("Operation", "DiffTree"); } this.RequiredBlobs.CompleteAdding(); metadata.Add("Success", !this.HasFailures); metadata.Add("DirectoryOperationsCount", this.TotalDirectoryOperations); metadata.Add("FileDeleteOperationsCount", this.TotalFileDeletes); metadata.Add("RequiredBlobsCount", this.RequiredBlobs.Count); activity.Stop(metadata); } } }