This RFC series depends on this series submitted yesterday: https://public-inbox.org/git/20181012212551.7689-1-newren@xxxxxxxxx/ (which in turn depends on en/merge-cleanup in next). Although this is an "update" to my previous RFC series from six months ago: https://public-inbox.org/git/20180305171125.22331-1-newren@xxxxxxxxx/ It's essentially a complete rewrite to instead use the strategy proposed by Jonathan and Junio (from a separate thread discussing that RFC series): https://public-inbox.org/git/20180312213521.GB58506@xxxxxxxxxxxxxxxxxxxxxxxxx/ https://public-inbox.org/git/CAPc5daVu8vv9RdGON8JiXEO3ycDVqQ38ySzZc-cpo+AQcAKXjA@xxxxxxxxxxxxxx The basic idea is to make the "file collision" conflict types all behave like add/add. These types are: * add/add * rename/add * rename/rename(2to1) * each rename/add piece of a rename/rename(1to2)/add[/add] conflict Specific bits that make this RFC: * Depends on another series not even in pu yet. * In order to simplify review, I add a new common function for all these conflict types to call in one commit, and since the function is not yet used at that point, I wrap the function in an #ifdef 0. In later patches, I remove the #ifdef. Is that...okay? * There are a few FIXMEs in the code. I'm okay leaving them there, but are others upset by them? * Every time I attempt to complete this series, I spot more problems; many of the merge-recursive series I've submitted since March were issues I discovered while trying to complete this series -- or secondary tangents discovered while working on the side-issues to this one. I've gotten to the point of automatically second-guessing myself on whether I could have actually completed the necessary fixes. Elijah Newren (7): Add testcases for consistency in file collision conflict handling t6036, t6042: testcases for rename collision of already conflicting files merge-recursive: new function for better colliding conflict resolutions merge-recursive: fix rename/add conflict handling merge-recursive: improve handling for rename/rename(2to1) conflicts merge-recursive: use handle_file_collision for add/add conflicts merge-recursive: improve rename/rename(1to2)/add[/add] handling merge-recursive.c | 513 ++++++++++++++++----------- t/t6036-recursive-corner-cases.sh | 228 +++++++++++- t/t6042-merge-rename-corner-cases.sh | 333 ++++++++++++++++- t/t6043-merge-rename-directories.sh | 107 +++--- 4 files changed, 893 insertions(+), 288 deletions(-) -- 2.19.0.3.g98f21ceff2.dirty