internal BlameHunkCollection(Repository repo, RepositorySafeHandle repoHandle, string path, BlameOptions options) { this.repo = repo; var rawopts = new GitBlameOptions { version = 1, flags = options.Strategy.ToGitBlameOptionFlags(), MinLine = (uint)options.MinLine, MaxLine = (uint)options.MaxLine, }; if (options.StartingAt != null) { rawopts.NewestCommit = repo.Committish(options.StartingAt).Oid; } if (options.StoppingAt != null) { rawopts.OldestCommit = repo.Committish(options.StoppingAt).Oid; } using (var blameHandle = Proxy.git_blame_file(repoHandle, path, rawopts)) { var numHunks = NativeMethods.git_blame_get_hunk_count(blameHandle); for (uint i = 0; i < numHunks; ++i) { var rawHunk = Proxy.git_blame_get_hunk_byindex(blameHandle, i); hunks.Add(new BlameHunk(this.repo, rawHunk)); } } }
internal BlameHunkCollection(Repository repo, RepositorySafeHandle repoHandle, string path, BlameOptions options) { this.repo = repo; var rawopts = new GitBlameOptions { version = 1, FindOptions = new GitDiffFindOptions { Version = 1, }, flags = options.Strategy.ToGitBlameOptionFlags(), MinLine = (uint)options.MinLine, MaxLine = (uint)options.MaxLine, }; if (options.FindNoRenames) { rawopts.FindOptions.Flags = GitDiffFindFlags.GIT_DIFF_FIND_NO_RENAMES; } else if (options.FindExactRenames) { rawopts.FindOptions.Flags = GitDiffFindFlags.GIT_DIFF_FIND_EXACT_MATCH_ONLY; } else { rawopts.FindOptions.Flags = GitDiffFindFlags.GIT_DIFF_FIND_RENAMES; } if (options.StartingAt != null) { rawopts.NewestCommit = repo.Committish(options.StartingAt).Oid; } if (options.StoppingAt != null) { rawopts.OldestCommit = repo.Committish(options.StoppingAt).Oid; } using (var blameHandle = Proxy.git_blame_file(repoHandle, path, rawopts)) { var numHunks = NativeMethods.git_blame_get_hunk_count(blameHandle); for (uint i = 0; i < numHunks; ++i) { var rawHunk = Proxy.git_blame_get_hunk_byindex(blameHandle, i); hunks.Add(new BlameHunk(this.repo, rawHunk)); } } }