Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
                }
            }
        }
Beispiel #3
0
        public void CreateFromHeadTree(uint indexVersion)
        {
            using (ITracer updateIndexActivity = this.tracer.StartActivity("CreateFromHeadTree", EventLevel.Informational))
            {
                Thread entryWritingThread = new Thread(() => this.WriteAllEntries(indexVersion));
                entryWritingThread.Start();

                GitProcess        git    = new GitProcess(this.enlistment);
                GitProcess.Result result = git.LsTree(
                    GVFSConstants.DotGit.HeadName,
                    this.EnqueueEntriesFromLsTree,
                    recursive: true,
                    showAllTrees: false);

                if (result.ExitCodeIsFailure)
                {
                    this.tracer.RelatedError("LsTree failed during index generation: {0}", result.Errors);
                    this.HasFailures = true;
                }

                this.entryQueue.CompleteAdding();
                entryWritingThread.Join();
            }
        }