libgit2/libgit2 — pull request #2183 by ethomson (2014-03-12 17:02:42+00:00)
Title: Refactor the `git_merge` API

This addresses some longstanding cruft in the `git_merge` API:

1. The `git_merge_opts` struct was pretty terrible, it was mostly options for the tree merging and options for the checkout, but then added a single other enum that indicated what to do in the presence of a fast-forward or an up-to-date merge, which leads to
2. The `git_merge` function dealt with fast-forward cases at all, which is of course not a merge and only dealt with in the porcelain of git core.

This breaks out a new function, `git_merge_status` to tell users about the "status" of a merge operation with the given inputs against HEAD. Users can use this to determine if a merge would be a fast-forward and can take the appropriate action themselves, like they did before after calling `git_merge`.

This greatly simplifies the inputs to `git_merge` and drops the entire `git_merge_result` struct now that it's unneeded.

Note that this is actually based on https://github.com/libgit2/libgit2/pull/2140 to avoid megaconflicts. I will rebase once that lands in development.