public override Annotation[] GetAnnotations (FilePath repositoryPath) { RevCommit hc = GetHeadCommit (); if (hc == null) return new Annotation [0]; RevCommit[] lineCommits = GitUtil.Blame (repo, hc, repositoryPath); int lineCount = lineCommits.Length; List<Annotation> annotations = new List<Annotation>(lineCount); for (int n = 0; n < lineCount; n++) { RevCommit c = lineCommits[n]; Annotation annotation = new Annotation (c.Name, c.GetAuthorIdent ().GetName () + "<" + c.GetAuthorIdent ().GetEmailAddress () + ">", c.GetCommitterIdent ().GetWhen ()); annotations.Add(annotation); } Document baseDocument = new Document (GetCommitTextContent (hc, repositoryPath)); Document workingDocument = new Document (File.ReadAllText (repositoryPath)); Annotation uncommittedRev = new Annotation("0000000000000000000000000000000000000000", "", new DateTime()); // Based on Subversion code until we support blame on things other than commits foreach (var hunk in baseDocument.Diff (workingDocument)) { annotations.RemoveRange (hunk.RemoveStart, hunk.Removed); int start = hunk.InsertStart - 1; //Line number - 1 = index bool insert = (start < annotations.Count); for (int i = 0; i < hunk.Inserted; ++i) { if (insert) { annotations.Insert (start, uncommittedRev); } else { annotations.Add (uncommittedRev); } } } return annotations.ToArray(); }