This version of the patch is much shorter and gets back to the essentials. I found that yes the existing 'svn_client_merge4()' API can be called as the final step, so all I am doing here now is providing a simplified reintegrate API that just checks the target WC is suitable and then finds and returns the two URLs and revisions for the two-URL merge. The caller then calls svn_client_merge4() with the two URLs and revisions that we found. Like this:
The svn client reintegrate merge code calls: svn_client_find_reintegrate_merge(&url1, &rev1, &url2, &rev2, ...); svn_client_merge4(url1, rev1, url2, rev2, ...); In between those two calls, I print a message telling the user what the equivalent two-URL merge command is. I cut out the stuff about getting a WC write lock around the whole caboodle, becausealthough it's theoretically correct to do soI don't think it's particularly important, given that there are so many other ways and means by which a client can get into the same kind of scenario. I cut out the code for pretty-printing the URLs in "^/repos-relpath" style because that was not fundamental but just an additional nicety. If no objections I plan to commit this, without the extra messages about two-url-command (which I'll come back to later). - Julian I (Julian Foad) wrote:> I want them to be reusable, and I expect that there should be > opportunities for re-use sooner or later. For example, the client > should be able to use ensure_wc_is_suitable_...() before other kinds > of merge, and even in other non-merge contexts. The second stage, > find_reintegrate_merge() obviously has a purpose that is specific to > a reintegrate merge, but still it should as far as possible return > results that have some meaning to the caller rather than an opaque > set of outputs that are only suitable for feeding into > do_reintegrate_merge(). And I'll investigate now whether and how > the third stage can call the existing two-URL merge API instead of > introducing a reintegrate-specific API function.
reintegrate-api-split-v2.patch
Description: Binary data