From: Elijah Newren <newren@gmail.com>
To: git@vger.kernel.org
Cc: sbeller@google.com, gitster@pobox.com, Elijah Newren <newren@gmail.com>
Subject: [PATCH v2 00/33] Add directory rename detection to git
Date: Mon, 20 Nov 2017 14:01:36 -0800 [thread overview]
Message-ID: <20171120220209.15111-1-newren@gmail.com> (raw)
This patchset introduces directory rename detection to merge-recursive.
See https://public-inbox.org/git/20171110190550.27059-1-newren@gmail.com/
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
next reply other threads:[~2017-11-20 22:04 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-20 22:01 Elijah Newren [this message]
2017-11-20 22:01 ` [PATCH v2 01/33] Tighten and correct a few testcases for merging and cherry-picking Elijah Newren
2017-11-20 22:01 ` [PATCH v2 02/33] merge-recursive: fix logic ordering issue Elijah Newren
2017-11-20 22:01 ` [PATCH v2 03/33] merge-recursive: add explanation for src_entry and dst_entry Elijah Newren
2017-11-20 22:01 ` [PATCH v2 04/33] directory rename detection: basic testcases Elijah Newren
2017-11-20 22:01 ` [PATCH v2 05/33] directory rename detection: directory splitting testcases Elijah Newren
2017-11-20 22:01 ` [PATCH v2 06/33] directory rename detection: testcases to avoid taking detection too far Elijah Newren
2017-11-20 22:01 ` [PATCH v2 07/33] directory rename detection: partially renamed directory testcase/discussion Elijah Newren
2017-11-20 22:01 ` [PATCH v2 08/33] directory rename detection: files/directories in the way of some renames Elijah Newren
2017-11-20 22:01 ` [PATCH v2 09/33] directory rename detection: testcases checking which side did the rename Elijah Newren
2017-11-20 22:01 ` [PATCH v2 10/33] directory rename detection: more involved edge/corner testcases Elijah Newren
2017-11-20 22:01 ` [PATCH v2 11/33] directory rename detection: testcases exploring possibly suboptimal merges Elijah Newren
2017-11-20 22:01 ` [PATCH v2 12/33] directory rename detection: miscellaneous testcases to complete coverage Elijah Newren
2017-11-20 22:01 ` [PATCH v2 13/33] directory rename detection: tests for handling overwriting untracked files Elijah Newren
2017-11-20 22:01 ` [PATCH v2 14/33] directory rename detection: tests for handling overwriting dirty files Elijah Newren
2017-11-20 22:01 ` [PATCH v2 15/33] merge-recursive: move the get_renames() function Elijah Newren
2017-11-20 22:01 ` [PATCH v2 16/33] merge-recursive: introduce new functions to handle rename logic Elijah Newren
2017-11-20 22:01 ` [PATCH v2 17/33] merge-recursive: fix leaks of allocated renames and diff_filepairs Elijah Newren
2017-11-20 22:01 ` [PATCH v2 18/33] merge-recursive: make !o->detect_rename codepath more obvious Elijah Newren
2017-11-20 22:01 ` [PATCH v2 19/33] merge-recursive: split out code for determining diff_filepairs Elijah Newren
2017-11-20 22:01 ` [PATCH v2 20/33] merge-recursive: add a new hashmap for storing directory renames Elijah Newren
2017-11-20 22:01 ` [PATCH v2 21/33] merge-recursive: add get_directory_renames() Elijah Newren
2017-11-20 22:01 ` [PATCH v2 22/33] merge-recursive: check for directory level conflicts Elijah Newren
2017-11-20 22:01 ` [PATCH v2 23/33] merge-recursive: add a new hashmap for storing file collisions Elijah Newren
2017-11-20 22:02 ` [PATCH v2 24/33] merge-recursive: add computation of collisions due to dir rename & merging Elijah Newren
2017-11-20 22:02 ` [PATCH v2 25/33] merge-recursive: check for file level conflicts then get new name Elijah Newren
2017-11-20 22:02 ` [PATCH v2 26/33] merge-recursive: when comparing files, don't include trees Elijah Newren
2017-11-20 22:02 ` [PATCH v2 27/33] merge-recursive: apply necessary modifications for directory renames Elijah Newren
2017-11-20 22:02 ` [PATCH v2 28/33] merge-recursive: avoid clobbering untracked files with " Elijah Newren
2017-11-20 22:02 ` [PATCH v2 29/33] merge-recursive: fix overwriting dirty files involved in renames Elijah Newren
2017-11-20 22:02 ` [PATCH v2 30/33] merge-recursive: fix remaining directory rename + dirty overwrite cases Elijah Newren
2017-11-20 22:02 ` [PATCH v2 31/33] directory rename detection: new testcases showcasing a pair of bugs Elijah Newren
2017-11-20 22:02 ` [PATCH v2 32/33] merge-recursive: avoid spurious rename/rename conflict from dir renames Elijah Newren
2017-11-20 22:02 ` [PATCH v2 33/33] merge-recursive: ensure we write updates for directory-renamed file Elijah Newren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171120220209.15111-1-newren@gmail.com \
--to=newren@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=sbeller@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).