This patchset introduces directory rename detection to merge-recursive.
See https://public-inbox.org/git/[email protected]/
for the previous series, design considerations, etc.
Changes since the first series include:
* Rebased on latest master (addressing a couple minor conflicts)
* Fixed numerous checkstyle.pl issues (except a few line-too-long and
string-split ones, in order to match the style of the surrounding code;
also, added two BUG() calls as suggested by Stefan)
* Various code cleanups and commit message improvements suggested by
reviewers
* Testcase cleanups suggested by reviewers:
* Use test_create_repo for different tests instead of heavy-handed
cleaning
* O-A-B instead of A-B-C for labelling original commit and sides of
merge
* reduced the number of git-rev-parse invocations
* various wording fixes, clarifications, and typo eradication in
comments
* New testcases (see patch 31/33):
* Added a pair of testcases suggested by Stefan Boller and a third that
was a slight modification of one of those two. The second testcase
Stefan suggested has a fairly weird resolution that folks may want to
double check, although to be fair, the input is fairly weird so some
kind of weirdness in the output is to be expected.
* Added a new testcase 9h based on a separate bug I found
* Fixed two bugs:
* ensure we write updates for directory-renamed file (bug triggered by
testcase suggested by Stefan Boller; see patch 33/33)
* avoid spurious rename/rename(1to2) conflicts from dir renames (found
while I was digging around more; see patch 32/33)
Both Junio and Stefan made numerous suggestions that were very helpful. I
believe this second series incorporates all suggestions made by Junio, all
but one of the non-tentative suggestions from Stefan (namely, the git
ls-files exit code checking), and several of the tentative suggestions from
Stefan as well. If folks feel strongly about the ls-files exit code
checking or can spot anything I missed that looks important, let me know
and I'll get it fixed up.
Elijah Newren (33):
Tighten and correct a few testcases for merging and cherry-picking
merge-recursive: fix logic ordering issue
merge-recursive: add explanation for src_entry and dst_entry
directory rename detection: basic testcases
directory rename detection: directory splitting testcases
directory rename detection: testcases to avoid taking detection too
far
directory rename detection: partially renamed directory
testcase/discussion
directory rename detection: files/directories in the way of some
renames
directory rename detection: testcases checking which side did the
rename
directory rename detection: more involved edge/corner testcases
directory rename detection: testcases exploring possibly suboptimal
merges
directory rename detection: miscellaneous testcases to complete
coverage
directory rename detection: tests for handling overwriting untracked
files
directory rename detection: tests for handling overwriting dirty files
merge-recursive: move the get_renames() function
merge-recursive: introduce new functions to handle rename logic
merge-recursive: fix leaks of allocated renames and diff_filepairs
merge-recursive: make !o->detect_rename codepath more obvious
merge-recursive: split out code for determining diff_filepairs
merge-recursive: add a new hashmap for storing directory renames
merge-recursive: add get_directory_renames()
merge-recursive: check for directory level conflicts
merge-recursive: add a new hashmap for storing file collisions
merge-recursive: add computation of collisions due to dir rename &
merging
merge-recursive: check for file level conflicts then get new name
merge-recursive: when comparing files, don't include trees
merge-recursive: apply necessary modifications for directory renames
merge-recursive: avoid clobbering untracked files with directory
renames
merge-recursive: fix overwriting dirty files involved in renames
merge-recursive: fix remaining directory rename + dirty overwrite
cases
directory rename detection: new testcases showcasing a pair of bugs
merge-recursive: avoid spurious rename/rename conflict from dir
renames
merge-recursive: ensure we write updates for directory-renamed file
merge-recursive.c | 1239 +++++++++++-
merge-recursive.h | 17 +
t/t3501-revert-cherry-pick.sh | 5 +-
t/t6043-merge-rename-directories.sh | 3821 +++++++++++++++++++++++++++++++++++
t/t7607-merge-overwrite.sh | 7 +-
unpack-trees.c | 4 +-
unpack-trees.h | 4 +
7 files changed, 4981 insertions(+), 116 deletions(-)
create mode 100755 t/t6043-merge-rename-directories.sh
--
2.15.0.309.g00c152f825