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));
                }
            }
        }