[PATCH v4 10/34] directory rename detection: more involved edge/corner testcases

2017-11-28 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 381 1 file changed, 381 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 5db2986de8..2c57a02c6d

[PATCH v4 16/34] merge-recursive: introduce new functions to handle rename logic

2017-11-28 Thread Elijah Newren
of that function because they store the information referenced in the rename_conflict_info, which is used later in process_entry(). Thus the reason for a separate cleanup_renames(). Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 43 +---

[PATCH v4 33/34] merge-recursive: avoid spurious rename/rename conflict from dir renames

2017-11-28 Thread Elijah Newren
that a directory rename testcase that was previously reported as a rename/delete conflict will now be reported as a modify/delete conflict. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 4 +-- t/t6043-merge-rename-directories.s

[PATCH v4 14/34] directory rename detection: tests for handling overwriting dirty files

2017-11-28 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 436 1 file changed, 436 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 00b0ee7f08..0644b95ec5

[PATCH v4 04/34] directory rename detection: basic testcases

2017-11-28 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 430 1 file changed, 430 insertions(+) create mode 100755 t/t6043-merge-rename-directories.sh diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-

[PATCH v4 06/34] directory rename detection: testcases to avoid taking detection too far

2017-11-28 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 150 1 file changed, 150 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 335aa1c145..0ccabed4a2

[PATCH v4 26/34] merge-recursive: check for file level conflicts then get new name

2017-11-28 Thread Elijah Newren
Before trying to apply directory renames to paths within the given directories, we want to make sure that there aren't conflicts at the file level either. If there aren't any, then get the new name from any directory renames. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recur

[PATCH v4 11/34] directory rename detection: testcases exploring possibly suboptimal merges

2017-11-28 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 394 1 file changed, 394 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 2c57a02c6d..fc9b13c37d

[PATCH v4 02/34] merge-recursive: fix logic ordering issue

2017-11-28 Thread Elijah Newren
demonstrating any bugs with the old ordering, but I suspect there were some for both normal renames and for directory renames. Fix the ordering. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/merge-recursi

[PATCH v4 25/34] merge-recursive: add computation of collisions due to dir rename & merging

2017-11-28 Thread Elijah Newren
-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 123 -- 1 file changed, 120 insertions(+), 3 deletions(-) diff --git a/merge-recursive.c b/merge-recursive.c index 6bd4f34d55..9e31baaf33 100644 --- a/merge-recursive.c +++ b

[PATCH v4 05/34] directory rename detection: directory splitting testcases

2017-11-28 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 137 1 file changed, 137 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index d8ead7c56b..335aa1c145

[PATCH v4 31/34] merge-recursive: fix remaining directory rename + dirty overwrite cases

2017-11-28 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 26 +++--- t/t6043-merge-rename-directories.sh | 8 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/merge-recursive.c b/merge-recursive.c index 2b8a

[PATCH v4 17/34] merge-recursive: fix leaks of allocated renames and diff_filepairs

2017-11-28 Thread Elijah Newren
-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 20 +++- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/merge-recursive.c b/merge-recursive.c index e95eac2c70..cdd0afa047 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -1653,13 +1

[PATCH v4 23/34] merge-recursive: check for directory level conflicts

2017-11-28 Thread Elijah Newren
Before trying to apply directory renames to paths within the given directories, we want to make sure that there aren't conflicts at the directory level. There will be additional checks at the individual file level too, which will be added later. Signed-off-by: Elijah Newren <new...@gmail.

[PATCH v4 00/34] Add directory rename detection to git

2017-11-28 Thread Elijah Newren
status == 'D') -+ if (pair->status == 'D' || pair->status == 'M') ++ if (pair->status != 'A' && pair->status != 'R') continue; dir_rename_ent = check_dir_renamed(pair->two->path,

[PATCH v4 28/34] merge-recursive: apply necessary modifications for directory renames

2017-11-28 Thread Elijah Newren
This commit hooks together all the directory rename logic by making the necessary changes to the rename struct, it's dst_entry, and the diff_filepair under consideration. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c

[PATCH v4 12/34] directory rename detection: miscellaneous testcases to complete coverage

2017-11-28 Thread Elijah Newren
references. :-) Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 536 +++- 1 file changed, 535 insertions(+), 1 deletion(-) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh

[PATCH v4 13/34] directory rename detection: tests for handling overwriting untracked files

2017-11-28 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 337 1 file changed, 337 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 42228a60aa..00b0ee7f08

[PATCH v4 18/34] merge-recursive: make !o->detect_rename codepath more obvious

2017-11-28 Thread Elijah Newren
Previously, if !o->detect_rename then get_renames() would return an empty string_list, and then process_renames() would have nothing to iterate over. It seems more straightforward to simply avoid calling either function in that case. Signed-off-by: Elijah Newren <new...@gmail.com> -

[PATCH v4 03/34] merge-recursive: add explanation for src_entry and dst_entry

2017-11-28 Thread Elijah Newren
If I have to walk through the debugger and inspect the values found in here in order to figure out their meaning, despite having known these things inside and out some years back, then they probably need a comment for the casual reader to explain their purpose. Signed-off-by: Elijah Newren <

[PATCH v4 22/34] merge-recursive: add get_directory_renames()

2017-11-28 Thread Elijah Newren
This populates a list of directory renames for us. The list of directory renames is not yet used, but will be in subsequent commits. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 155 -- 1 file changed, 152 inse

[PATCH v4 19/34] merge-recursive: split out code for determining diff_filepairs

2017-11-28 Thread Elijah Newren
Create a new function, get_diffpairs() to compute the diff_filepairs between two trees. While these are currently only used in get_renames(), I want them to be available to some new functions. No actual logic changes yet. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recur

[PATCH v4 15/34] merge-recursive: move the get_renames() function

2017-11-28 Thread Elijah Newren
I want to re-use some other functions in the file without moving those other functions or dealing with a handful of annoying split function declarations and definitions. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c

[PATCH v4 24/34] merge-recursive: add a new hashmap for storing file collisions

2017-11-28 Thread Elijah Newren
will be used for this purpose. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 23 +++ merge-recursive.h | 7 +++ 2 files changed, 30 insertions(+) diff --git a/merge-recursive.c b/merge-recursive.c index d92fba2775..6bd4f34d55 100644 --- a

Re: [PATCH] merge-recursive: ignore_case shouldn't reject intentional removals

2017-11-27 Thread Elijah Newren
On Mon, Nov 27, 2017 at 3:39 PM, Junio C Hamano <gits...@pobox.com> wrote: > Elijah Newren <new...@gmail.com> writes: > >>> As a fix, this sorely wants something new in t/ directory. >> >> Well, then perhaps I was wrong to submit it independent of m

Re: [PATCH] merge-recursive: ignore_case shouldn't reject intentional removals

2017-11-27 Thread Elijah Newren
[Removed cc's that just bounce] On Sun, Nov 26, 2017 at 7:40 PM, Junio C Hamano <gits...@pobox.com> wrote: > Elijah Newren <new...@gmail.com> writes: > >> In commit ae352c7f3 (merge-recursive.c: fix case-changing merge bug, >> 2014-05-01), it was observed that remov

Re: [PATCH v3 21/33] merge-recursive: add get_directory_renames()

2017-11-25 Thread Elijah Newren
On Sat, Nov 25, 2017 at 4:52 PM, Johannes Schindelin <johannes.schinde...@gmx.de> wrote: > On Tue, 21 Nov 2017, Elijah Newren wrote: > >> diff --git a/merge-recursive.c b/merge-recursive.c >> + if (old_len != new_len || strncmp(old_path, new_path, old_len)) { &

Re: submodules and merging (Was: Re: [PATCH 02/30] merge-recursive: Fix logic ordering issue)

2017-11-25 Thread Elijah Newren
On Wed, Nov 15, 2017 at 9:13 AM, Jacob Keller wrote: > On Tue, Nov 14, 2017 at 10:13 AM, Stefan Beller wrote: >> But this line of though might be distracting from your original point, >> which was that we have so much to keep in mind when doing tree

Re: [PATCH] merge-recursive: ignore_case shouldn't reject intentional removals

2017-11-25 Thread Elijah Newren
On Fri, Nov 24, 2017 at 7:29 PM, Junio C Hamano <gits...@pobox.com> wrote: > Elijah Newren <new...@gmail.com> writes: > >> But what it really is forced to do is more of a 4-way merge; a good >> chunk of its annoying complexity is based around this (undoc

Re: [PATCH] merge-recursive: ignore_case shouldn't reject intentional removals

2017-11-24 Thread Elijah Newren
On Fri, Nov 24, 2017 at 12:04 PM, Eric Sunshine <sunsh...@sunshineco.com> wrote: > On Fri, Nov 24, 2017 at 2:59 PM, Elijah Newren <new...@gmail.com> wrote: >> In commit ae352c7f3 (merge-recursive.c: fix case-changing merge bug, >> 2014-05-01), it was observe

Re: [PATCH v3 00/33] Add directory rename detection to git

2017-11-24 Thread Elijah Newren
On Thu, Nov 23, 2017 at 9:25 PM, Elijah Newren <new...@gmail.com> wrote: > On Thu, Nov 23, 2017 at 2:28 PM, Elijah Newren <new...@gmail.com> wrote: >> On Thu, Nov 23, 2017 at 3:52 AM, Adam Dinwoodie <a...@dinwoodie.org> wrote: >>> On Tuesday 21 November 2017 at

[PATCH] merge-recursive: ignore_case shouldn't reject intentional removals

2017-11-24 Thread Elijah Newren
In commit ae352c7f3 (merge-recursive.c: fix case-changing merge bug, 2014-05-01), it was observed that removing files could be problematic on case insensitive file systems, because we could end up removing files that differed in case only rather than deleting the intended file -- something that

Re: [PATCH v3 00/33] Add directory rename detection to git

2017-11-23 Thread Elijah Newren
On Thu, Nov 23, 2017 at 2:28 PM, Elijah Newren <new...@gmail.com> wrote: > On Thu, Nov 23, 2017 at 3:52 AM, Adam Dinwoodie <a...@dinwoodie.org> wrote: >> On Tuesday 21 November 2017 at 12:00 am -0800, Elijah Newren wrote: >>> >>> >>

Re: [PATCH v3 00/33] Add directory rename detection to git

2017-11-23 Thread Elijah Newren
On Thu, Nov 23, 2017 at 3:52 AM, Adam Dinwoodie <a...@dinwoodie.org> wrote: > On Tuesday 21 November 2017 at 12:00 am -0800, Elijah Newren wrote: >> >> >> merge-recursive.c | 1243 +++- >> merge-recursive.h | 17 +

Re: [PATCH v3 00/33] Add directory rename detection to git

2017-11-22 Thread Elijah Newren
On Wed, Nov 22, 2017 at 11:24 AM, Stefan Beller <sbel...@google.com> wrote: > On Tue, Nov 21, 2017 at 5:12 PM, Elijah Newren <new...@gmail.com> wrote: >> On Tue, Nov 21, 2017 at 4:42 PM, Stefan Beller <sbel...@google.com> wrote: >>> On Tue, Nov 21, 2017 at 12:00

Re: [PATCH v3 00/33] Add directory rename detection to git

2017-11-21 Thread Elijah Newren
On Tue, Nov 21, 2017 at 4:42 PM, Stefan Beller <sbel...@google.com> wrote: > On Tue, Nov 21, 2017 at 12:00 AM, Elijah Newren <new...@gmail.com> wrote: >> This patchset introduces directory rename detection to merge-recursive; I'm >> resubmitting just a few hours after

Re: cherry-pick very slow on big repository

2017-11-21 Thread Elijah Newren
On Tue, Nov 21, 2017 at 4:07 AM, Peter Krefting <pe...@softwolves.pp.se> wrote: > Elijah Newren: > >> Sure, take a look at the big-repo-small-cherry-pick branch of >> https://github.com/newren/git > > > With those changes, the time usage is the same

[PATCH v3 30/33] merge-recursive: fix remaining directory rename + dirty overwrite cases

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 26 +++--- t/t6043-merge-rename-directories.sh | 8 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/merge-recursive.c b/merge-recursive.c index 5b4c

[PATCH v3 07/33] directory rename detection: partially renamed directory testcase/discussion

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 104 1 file changed, 104 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 0ccabed4a2..1dcf010aa6

[PATCH v3 08/33] directory rename detection: files/directories in the way of some renames

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 320 1 file changed, 320 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 1dcf010aa6..29b2af7f19

[PATCH v3 01/33] Tighten and correct a few testcases for merging and cherry-picking

2017-11-21 Thread Elijah Newren
t expected the merge to succeed. Fix that, and add a few more checks to make sure that the merge really does produce the expected results. Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t3501-revert-cherry-pick.sh | 7 +-- t/t7607-merge-overwrite.sh| 5 - 2 files changed, 9

[PATCH v3 27/33] merge-recursive: apply necessary modifications for directory renames

2017-11-21 Thread Elijah Newren
This commit hooks together all the directory rename logic by making the necessary changes to the rename struct, it's dst_entry, and the diff_filepair under consideration. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c

[PATCH v3 33/33] merge-recursive: ensure we write updates for directory-renamed file

2017-11-21 Thread Elijah Newren
, we have to move the file to a new location and re-write it. Update the code that checks whether we can skip the update to also work in the presence of directory renames. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 4 +--- t/t6043-merge-

[PATCH v3 14/33] directory rename detection: tests for handling overwriting dirty files

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 436 1 file changed, 436 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 7408c788fc..88243651f7

[PATCH v3 32/33] merge-recursive: avoid spurious rename/rename conflict from dir renames

2017-11-21 Thread Elijah Newren
that a directory rename testcase that was previously reported as a rename/delete conflict will now be reported as a modify/delete conflict. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 4 +-- t/t6043-merge-rename-directories.s

[PATCH v3 17/33] merge-recursive: fix leaks of allocated renames and diff_filepairs

2017-11-21 Thread Elijah Newren
-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 20 +++- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/merge-recursive.c b/merge-recursive.c index 4249caad4d..db8590ab1a 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -1653,13 +1

[PATCH v3 12/33] directory rename detection: miscellaneous testcases to complete coverage

2017-11-21 Thread Elijah Newren
references. :-) Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 536 +++- 1 file changed, 535 insertions(+), 1 deletion(-) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh

[PATCH v3 11/33] directory rename detection: testcases exploring possibly suboptimal merges

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 392 1 file changed, 392 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 2c57a02c6d..b153468a5c

[PATCH v3 09/33] directory rename detection: testcases checking which side did the rename

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 321 1 file changed, 321 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 29b2af7f19..5db2986de8

[PATCH v3 23/33] merge-recursive: add a new hashmap for storing file collisions

2017-11-21 Thread Elijah Newren
will be used for this purpose. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 23 +++ merge-recursive.h | 7 +++ 2 files changed, 30 insertions(+) diff --git a/merge-recursive.c b/merge-recursive.c index c235b27c55..1fa3eb6fb5 100644 --- a

[PATCH v3 05/33] directory rename detection: directory splitting testcases

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 137 1 file changed, 137 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index d8ead7c56b..335aa1c145

[PATCH v3 31/33] directory rename detection: new testcases showcasing a pair of bugs

2017-11-21 Thread Elijah Newren
tch series, but which actually uncovered a bug. Round things out with a test that is a cross between the two testcases that showed existing bugs in order to make sure we aren't merely addressing problems in isolation but in general. Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6

[PATCH v3 26/33] merge-recursive: when comparing files, don't include trees

2017-11-21 Thread Elijah Newren
to files; the D/F conflict handling is done elsewhere. This code is just concerned with what entries existed for a given path on the different sides of the merge, so create a get_tree_entry_if_blob() helper function and use it. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.

[PATCH v3 28/33] merge-recursive: avoid clobbering untracked files with directory renames

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 42 +++-- t/t6043-merge-rename-directories.sh | 6 +++--- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/merge-recursive.c b/merge-recursive.c

[PATCH v3 19/33] merge-recursive: split out code for determining diff_filepairs

2017-11-21 Thread Elijah Newren
Create a new function, get_diffpairs() to compute the diff_filepairs between two trees. While these are currently only used in get_renames(), I want them to be available to some new functions. No actual logic changes yet. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recur

[PATCH v3 18/33] merge-recursive: make !o->detect_rename codepath more obvious

2017-11-21 Thread Elijah Newren
Previously, if !o->detect_rename then get_renames() would return an empty string_list, and then process_renames() would have nothing to iterate over. It seems more straightforward to simply avoid calling either function in that case. Signed-off-by: Elijah Newren <new...@gmail.com> -

[PATCH v3 13/33] directory rename detection: tests for handling overwriting untracked files

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 337 1 file changed, 337 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 9e00a26c69..7408c788fc

[PATCH v3 16/33] merge-recursive: introduce new functions to handle rename logic

2017-11-21 Thread Elijah Newren
of that function because they store the information referenced in the rename_conflict_info, which is used later in process_entry(). Thus the reason for a separate cleanup_renames(). Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 43 +---

[PATCH v3 04/33] directory rename detection: basic testcases

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 430 1 file changed, 430 insertions(+) create mode 100755 t/t6043-merge-rename-directories.sh diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-

[PATCH v3 22/33] merge-recursive: check for directory level conflicts

2017-11-21 Thread Elijah Newren
Before trying to apply directory renames to paths within the given directories, we want to make sure that there aren't conflicts at the directory level. There will be additional checks at the individual file level too, which will be added later. Signed-off-by: Elijah Newren <new...@gmail.

[PATCH v3 03/33] merge-recursive: add explanation for src_entry and dst_entry

2017-11-21 Thread Elijah Newren
If I have to walk through the debugger and inspect the values found in here in order to figure out their meaning, despite having known these things inside and out some years back, then they probably need a comment for the casual reader to explain their purpose. Signed-off-by: Elijah Newren <

[PATCH v3 25/33] merge-recursive: check for file level conflicts then get new name

2017-11-21 Thread Elijah Newren
Before trying to apply directory renames to paths within the given directories, we want to make sure that there aren't conflicts at the file level either. If there aren't any, then get the new name from any directory renames. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recur

[PATCH v3 29/33] merge-recursive: fix overwriting dirty files involved in renames

2017-11-21 Thread Elijah Newren
in a subsequent commit. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 85 - merge-recursive.h | 2 + t/t3501-revert-cherry-pick.sh | 2 +- t/t6043-merge-rename-directories.sh | 2 +- t/t7607

[PATCH v3 06/33] directory rename detection: testcases to avoid taking detection too far

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 150 1 file changed, 150 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 335aa1c145..0ccabed4a2

[PATCH v3 00/33] Add directory rename detection to git

2017-11-21 Thread Elijah Newren
: * Fixed various compilation errors with make DEVELOPER=1. 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

[PATCH v3 15/33] merge-recursive: move the get_renames() function

2017-11-21 Thread Elijah Newren
I want to re-use some other functions in the file without moving those other functions or dealing with a handful of annoying split function declarations and definitions. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c

[PATCH v3 20/33] merge-recursive: add a new hashmap for storing directory renames

2017-11-21 Thread Elijah Newren
This just adds dir_rename_entry and the associated functions; code using these will be added in subsequent commits. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 35 +++ merge-recursive.h | 8 2 files changed, 43 inse

[PATCH v3 24/33] merge-recursive: add computation of collisions due to dir rename & merging

2017-11-21 Thread Elijah Newren
-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 124 -- 1 file changed, 121 insertions(+), 3 deletions(-) diff --git a/merge-recursive.c b/merge-recursive.c index 1fa3eb6fb5..b8c7d6dce3 100644 --- a/merge-recursive.c +++ b

[PATCH v3 02/33] merge-recursive: fix logic ordering issue

2017-11-21 Thread Elijah Newren
demonstrating any bugs with the old ordering, but I suspect there were some for both normal renames and for directory renames. Fix the ordering. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/merge-recursi

[PATCH v3 21/33] merge-recursive: add get_directory_renames()

2017-11-21 Thread Elijah Newren
This populates a list of directory renames for us. The list of directory renames is not yet used, but will be in subsequent commits. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 152 ++ 1 file changed, 152 inse

[PATCH v3 10/33] directory rename detection: more involved edge/corner testcases

2017-11-21 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 381 1 file changed, 381 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 5db2986de8..2c57a02c6d

[RFC PATCH v2 6/9] merge-recursive: improve handling for rename/rename(2to1) conflicts

2017-11-20 Thread Elijah Newren
two files and just automatically consider them to be dissimilar. This is done to avoid foisting conflicts-of-conflicts on the user. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c| 101 +-- t/t6042-merge-rename-

[RFC PATCH v2 7/9] merge-recursive: improve handling for add/add conflicts

2017-11-20 Thread Elijah Newren
to be modified so that they were similar. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c| 25 - t/t2023-checkout-m.sh| 2 +- t/t3418-rebase-continue.sh | 27 +++ t/t3504-cherr

[RFC PATCH v2 8/9] merge-recursive: accelerate rename detection

2017-11-20 Thread Elijah Newren
t the time necessary for a cherry-pick down by a factor of about 8 (from around 4.5 minutes down to around 34 seconds) Signed-off-by: Elijah Newren <new...@gmail.com> --- diff.c| 1 + diff.h| 3 +++ diffcore-rename.c | 43 +- merge-

[RFC PATCH v2 4/9] Add testcases for improved file collision conflict handling

2017-11-20 Thread Elijah Newren
expected to fail. Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6042-merge-rename-corner-cases.sh | 210 +++ 1 file changed, 210 insertions(+) diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh index 411550d2b6..d8fe

[RFC PATCH v2 5/9] merge-recursive: fix rename/add conflict handling

2017-11-20 Thread Elijah Newren
handle_file_collision() fixes all of these issues, and adds smarts to allow two-way merge OR move colliding files to separate paths depending on the similarity of the colliding files. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c

[RFC PATCH v2 9/9] diffcore-rename: filter rename_src list when possible

2017-11-20 Thread Elijah Newren
the time necessary for a cherry-pick down by a factor of about 2 (from around 34 seconds down to just under 16 seconds) Signed-off-by: Elijah Newren <new...@gmail.com> --- diffcore-rename.c | 47 +++ 1 file changed, 31 insertions(+), 16 deletions(-)

[RFC PATCH v2 3/9] merge-recursive: new function for better colliding conflict resolutions

2017-11-20 Thread Elijah Newren
s will be discussed in subsequent commits that modify the code to take advantage of this new shared function. Signed-off-by: Elijah Newren <new...@gmail.com> --- diff.h| 4 ++ diffcore-rename.c | 6 +-- merge-recursive.c | 121 ++

[RFC PATCH v2 1/9] diffcore-rename: no point trying to find a match better than exact

2017-11-20 Thread Elijah Newren
directories involved in renames, this cut the time necessary for a cherry-pick down by about 50% (from around 9 minutes to 4.5 minutes). Signed-off-by: Elijah Newren <new...@gmail.com> --- diffcore-rename.c | 17 +++-- 1 file changed, 11 insertions(+), 6 deletions(-) diff

[RFC PATCH v2 0/9] Improve merge recursive performance

2017-11-20 Thread Elijah Newren
series. If you just want to test it out, it's available as the 'big-repo-small-cherry-pick' branch of https://github.com/newren/git . Elijah Newren (9): diffcore-rename: no point trying to find a match better than exact merge-recursive: avoid unnecessary string list lookups merge-recursive

[RFC PATCH v2 2/9] merge-recursive: avoid unnecessary string list lookups

2017-11-20 Thread Elijah Newren
Since we're taking entries from active_cache, which is already in sorted order with same-named entries adjacent, we can skip a lookup. Also, we can just use append instead of insert (avoiding the need to find where to put the new item) and still end up with a sorted list. Signed-off-by: Elijah

[PATCH v2 03/33] merge-recursive: add explanation for src_entry and dst_entry

2017-11-20 Thread Elijah Newren
If I have to walk through the debugger and inspect the values found in here in order to figure out their meaning, despite having known these things inside and out some years back, then they probably need a comment for the casual reader to explain their purpose. Signed-off-by: Elijah Newren <

[PATCH v2 07/33] directory rename detection: partially renamed directory testcase/discussion

2017-11-20 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 104 1 file changed, 104 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 0ccabed4a2..1dcf010aa6

[PATCH v2 08/33] directory rename detection: files/directories in the way of some renames

2017-11-20 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 320 1 file changed, 320 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 1dcf010aa6..29b2af7f19

[PATCH v2 01/33] Tighten and correct a few testcases for merging and cherry-picking

2017-11-20 Thread Elijah Newren
t expected the merge to succeed. Fix that, and add a few more checks to make sure that the merge really does produce the expected results. Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t3501-revert-cherry-pick.sh | 7 +-- t/t7607-merge-overwrite.sh| 5 - 2 files changed, 9

[PATCH v2 00/33] Add directory rename detection to git

2017-11-20 Thread Elijah Newren
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

[PATCH v2 14/33] directory rename detection: tests for handling overwriting dirty files

2017-11-20 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 436 1 file changed, 436 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 7408c788fc..88243651f7

[PATCH v2 09/33] directory rename detection: testcases checking which side did the rename

2017-11-20 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 321 1 file changed, 321 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 29b2af7f19..5db2986de8

[PATCH v2 15/33] merge-recursive: move the get_renames() function

2017-11-20 Thread Elijah Newren
I want to re-use some other functions in the file without moving those other functions or dealing with a handful of annoying split function declarations and definitions. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c

[PATCH v2 12/33] directory rename detection: miscellaneous testcases to complete coverage

2017-11-20 Thread Elijah Newren
references. :-) Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 536 +++- 1 file changed, 535 insertions(+), 1 deletion(-) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh

[PATCH v2 16/33] merge-recursive: introduce new functions to handle rename logic

2017-11-20 Thread Elijah Newren
of that function because they store the information referenced in the rename_conflict_info, which is used later in process_entry(). Thus the reason for a separate cleanup_renames(). Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 43 +---

[PATCH v2 13/33] directory rename detection: tests for handling overwriting untracked files

2017-11-20 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 337 1 file changed, 337 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index 9e00a26c69..7408c788fc

[PATCH v2 05/33] directory rename detection: directory splitting testcases

2017-11-20 Thread Elijah Newren
Signed-off-by: Elijah Newren <new...@gmail.com> --- t/t6043-merge-rename-directories.sh | 137 1 file changed, 137 insertions(+) diff --git a/t/t6043-merge-rename-directories.sh b/t/t6043-merge-rename-directories.sh index d8ead7c56b..335aa1c145

[PATCH v2 27/33] merge-recursive: apply necessary modifications for directory renames

2017-11-20 Thread Elijah Newren
This commit hooks together all the directory rename logic by making the necessary changes to the rename struct, it's dst_entry, and the diff_filepair under consideration. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c

[PATCH v2 19/33] merge-recursive: split out code for determining diff_filepairs

2017-11-20 Thread Elijah Newren
Create a new function, get_diffpairs() to compute the diff_filepairs between two trees. While these are currently only used in get_renames(), I want them to be available to some new functions. No actual logic changes yet. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recur

[PATCH v2 02/33] merge-recursive: fix logic ordering issue

2017-11-20 Thread Elijah Newren
demonstrating any bugs with the old ordering, but I suspect there were some for both normal renames and for directory renames. Fix the ordering. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/merge-recursi

[PATCH v2 23/33] merge-recursive: add a new hashmap for storing file collisions

2017-11-20 Thread Elijah Newren
will be used for this purpose. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 23 +++ merge-recursive.h | 7 +++ 2 files changed, 30 insertions(+) diff --git a/merge-recursive.c b/merge-recursive.c index 03897af883..472754c493 100644 --- a

[PATCH v2 20/33] merge-recursive: add a new hashmap for storing directory renames

2017-11-20 Thread Elijah Newren
This just adds dir_rename_entry and the associated functions; code using these will be added in subsequent commits. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 35 +++ merge-recursive.h | 8 2 files changed, 43 inse

[PATCH v2 32/33] merge-recursive: avoid spurious rename/rename conflict from dir renames

2017-11-20 Thread Elijah Newren
that a directory rename testcase that was previously reported as a rename/delete conflict will now be reported as a modify/delete conflict. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 4 +-- t/t6043-merge-rename-directories.s

[PATCH v2 21/33] merge-recursive: add get_directory_renames()

2017-11-20 Thread Elijah Newren
This populates a list of directory renames for us. The list of directory renames is not yet used, but will be in subsequent commits. Signed-off-by: Elijah Newren <new...@gmail.com> --- merge-recursive.c | 149 ++ 1 file changed, 149 inse

<    5   6   7   8   9   10   11   12   >