From: "Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Derrick Stolee <stolee@gmail.com>,
Elijah Newren <newren@gmail.com>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Elijah Newren <newren@gmail.com>
Subject: [PATCH v3 00/11] merge-ort: add basic rename detection
Date: Tue, 15 Dec 2020 18:27:55 +0000 [thread overview]
Message-ID: <pull.812.v3.git.1608056886.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.812.v2.git.1607962900.gitgitgadget@gmail.com>
This series builds on en/merge-ort-2 and adds basic rename detection to
merge-ort.
Changes since v2 (all due to feedback from Stolee's reviews):
* reordered two of the patches (one depended on vars declared in another)
* a few other adjustments to make patches individually compile (I usually
check this; so embarrassing that I somehow missed it)
Elijah Newren (11):
merge-ort: add basic data structures for handling renames
merge-ort: add initial outline for basic rename detection
merge-ort: implement detect_regular_renames()
merge-ort: implement compare_pairs() and collect_renames()
merge-ort: add basic outline for process_renames()
merge-ort: add implementation of both sides renaming identically
merge-ort: add implementation of both sides renaming differently
merge-ort: add implementation of rename/delete conflicts
merge-ort: add implementation of rename collisions
merge-ort: add implementation of normal rename handling
merge-ort: add implementation of type-changed rename handling
merge-ort.c | 446 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 430 insertions(+), 16 deletions(-)
base-commit: c5a6f65527aa3b6f5d7cf25437a88d8727ab0646
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-812%2Fnewren%2Fort-renames-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-812/newren/ort-renames-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/812
Range-diff vs v2:
1: 78621ca0788 = 1: 78621ca0788 merge-ort: add basic data structures for handling renames
2: d846decf40b = 2: d846decf40b merge-ort: add initial outline for basic rename detection
3: 620fc64032d = 3: 620fc64032d merge-ort: implement detect_regular_renames()
4: 9382dc4d50b = 4: 9382dc4d50b merge-ort: implement compare_pairs() and collect_renames()
5: d20fab8d403 = 5: d20fab8d403 merge-ort: add basic outline for process_renames()
6: 15fff3dd0c4 ! 6: 7ec51feb418 merge-ort: add implementation of both sides renaming identically
@@ merge-ort.c: static int process_renames(struct merge_options *opt,
const char *pathnames[3];
+ struct version_info merged;
+ struct conflict_info *base, *side1, *side2;
-+ unsigned was_binary_blob = 0;
pathnames[0] = oldpath;
pathnames[1] = newpath;
7: d00e26be784 ! 7: d37e2626c30 merge-ort: add implementation of both sides renaming differently
@@ Commit message
Signed-off-by: Elijah Newren <newren@gmail.com>
## merge-ort.c ##
+@@ merge-ort.c: static int process_renames(struct merge_options *opt,
+ const char *pathnames[3];
+ struct version_info merged;
+ struct conflict_info *base, *side1, *side2;
++ unsigned was_binary_blob = 0;
+
+ pathnames[0] = oldpath;
+ pathnames[1] = newpath;
@@ merge-ort.c: static int process_renames(struct merge_options *opt,
}
9: f017534243c ! 8: 6b79da5e8a4 merge-ort: add implementation of rename/delete conflicts
@@ merge-ort.c: static int process_renames(struct merge_options *opt,
old_ent = strmap_get_entry(&opt->priv->paths, pair->one->path);
oldpath = old_ent->key;
@@ merge-ort.c: static int process_renames(struct merge_options *opt,
- if (type_changed && collision) {
/* special handling so later blocks can handle this */
die("Not yet implemented");
+ }
+ if (source_deleted) {
+ if (target_index == 1) {
+ rename_branch = opt->branch1;
@@ merge-ort.c: static int process_renames(struct merge_options *opt,
+ rename_branch = opt->branch2;
+ delete_branch = opt->branch1;
+ }
- }
++ }
assert(source_deleted || oldinfo->filemask & old_sidemask);
+
@@ merge-ort.c: static int process_renames(struct merge_options *opt,
- "to %s in %s, but deleted in %s."),
- oldpath, newpath, rename_branch, delete_branch);
+ /* rename/add/delete or rename/rename(2to1)/delete */
+ die("Not yet implemented");
} else {
- /* a few different cases... */
+ /*
8: edd610321a0 ! 9: 065fc0396dc merge-ort: add implementation of rename collisions
@@ merge-ort.c: static int process_renames(struct merge_options *opt,
+ &side1->stages[1],
+ &side2->stages[2],
+ pathnames,
-+ 1 + 2*opt->priv->call_depth,
++ 1 + 2 * opt->priv->call_depth,
+ &merged);
+
+ memcpy(&newinfo->stages[target_index], &merged,
@@ merge-ort.c: static int process_renames(struct merge_options *opt,
+ "to %s in %s, but deleted in %s."),
+ oldpath, newpath, rename_branch, delete_branch);
} else {
- /* a few different cases... */
- if (type_changed) {
+ /*
+ * a few different cases...start by copying the
10: 22cb7110261 = 10: 73426c16687 merge-ort: add implementation of normal rename handling
11: ff09ddb9caf ! 11: 8f4662398ab merge-ort: add implementation of type-changed rename handling
@@ Commit message
## merge-ort.c ##
@@ merge-ort.c: static int process_renames(struct merge_options *opt,
+ (S_ISREG(oldinfo->stages[other_source_index].mode) !=
S_ISREG(newinfo->stages[target_index].mode));
if (type_changed && collision) {
- /* special handling so later blocks can handle this */
+- /* special handling so later blocks can handle this */
- die("Not yet implemented");
+ /*
++ * special handling so later blocks can handle this...
++ *
+ * if type_changed && collision are both true, then this
+ * was really a double rename, but one side wasn't
+ * detected due to lack of break detection. I.e.
@@ merge-ort.c: static int process_renames(struct merge_options *opt,
+ * See also t6430, 'rename vs. rename/symlink'
+ */
+ collision = 0;
-+ }
+ }
if (source_deleted) {
if (target_index == 1) {
- rename_branch = opt->branch1;
@@ merge-ort.c: static int process_renames(struct merge_options *opt,
newinfo->pathnames[0] = oldpath;
if (type_changed) {
--
gitgitgadget
next prev parent reply other threads:[~2020-12-15 18:28 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-09 19:41 [PATCH 00/11] merge-ort: add basic rename detection Elijah Newren via GitGitGadget
2020-12-09 19:41 ` [PATCH 01/11] merge-ort: add basic data structures for handling renames Elijah Newren via GitGitGadget
2020-12-11 2:03 ` Derrick Stolee
2020-12-11 9:41 ` Elijah Newren
2020-12-09 19:41 ` [PATCH 02/11] merge-ort: add initial outline for basic rename detection Elijah Newren via GitGitGadget
2020-12-11 2:39 ` Derrick Stolee
2020-12-11 9:40 ` Elijah Newren
2020-12-13 7:47 ` Elijah Newren
2020-12-14 14:33 ` Derrick Stolee
2020-12-14 15:42 ` Johannes Schindelin
2020-12-14 16:11 ` Elijah Newren
2020-12-14 16:50 ` Johannes Schindelin
2020-12-14 17:35 ` Elijah Newren
2020-12-09 19:41 ` [PATCH 03/11] merge-ort: implement detect_regular_renames() Elijah Newren via GitGitGadget
2020-12-11 2:54 ` Derrick Stolee
2020-12-11 17:38 ` Elijah Newren
2020-12-09 19:41 ` [PATCH 04/11] merge-ort: implement compare_pairs() and collect_renames() Elijah Newren via GitGitGadget
2020-12-11 3:00 ` Derrick Stolee
2020-12-11 18:43 ` Elijah Newren
2020-12-09 19:41 ` [PATCH 05/11] merge-ort: add basic outline for process_renames() Elijah Newren via GitGitGadget
2020-12-11 3:24 ` Derrick Stolee
2020-12-11 20:03 ` Elijah Newren
2020-12-09 19:41 ` [PATCH 06/11] merge-ort: add implementation of both sides renaming identically Elijah Newren via GitGitGadget
2020-12-11 3:32 ` Derrick Stolee
2020-12-09 19:41 ` [PATCH 07/11] merge-ort: add implementation of both sides renaming differently Elijah Newren via GitGitGadget
2020-12-11 3:39 ` Derrick Stolee
2020-12-11 21:56 ` Elijah Newren
2020-12-09 19:41 ` [PATCH 08/11] merge-ort: add implementation of rename collisions Elijah Newren via GitGitGadget
2020-12-09 19:41 ` [PATCH 09/11] merge-ort: add implementation of rename/delete conflicts Elijah Newren via GitGitGadget
2020-12-09 19:41 ` [PATCH 10/11] merge-ort: add implementation of normal rename handling Elijah Newren via GitGitGadget
2020-12-09 19:41 ` [PATCH 11/11] merge-ort: add implementation of type-changed " Elijah Newren via GitGitGadget
2020-12-14 16:21 ` [PATCH v2 00/11] merge-ort: add basic rename detection Elijah Newren via GitGitGadget
2020-12-14 16:21 ` [PATCH v2 01/11] merge-ort: add basic data structures for handling renames Elijah Newren via GitGitGadget
2020-12-14 16:21 ` [PATCH v2 02/11] merge-ort: add initial outline for basic rename detection Elijah Newren via GitGitGadget
2020-12-14 16:21 ` [PATCH v2 03/11] merge-ort: implement detect_regular_renames() Elijah Newren via GitGitGadget
2020-12-14 16:21 ` [PATCH v2 04/11] merge-ort: implement compare_pairs() and collect_renames() Elijah Newren via GitGitGadget
2020-12-14 16:21 ` [PATCH v2 05/11] merge-ort: add basic outline for process_renames() Elijah Newren via GitGitGadget
2020-12-14 16:21 ` [PATCH v2 06/11] merge-ort: add implementation of both sides renaming identically Elijah Newren via GitGitGadget
2020-12-14 16:21 ` [PATCH v2 07/11] merge-ort: add implementation of both sides renaming differently Elijah Newren via GitGitGadget
2020-12-14 16:21 ` [PATCH v2 08/11] merge-ort: add implementation of rename collisions Elijah Newren via GitGitGadget
2020-12-15 14:09 ` Derrick Stolee
2020-12-15 16:56 ` Elijah Newren
2020-12-14 16:21 ` [PATCH v2 09/11] merge-ort: add implementation of rename/delete conflicts Elijah Newren via GitGitGadget
2020-12-15 14:23 ` Derrick Stolee
2020-12-15 17:07 ` Elijah Newren
2020-12-15 14:27 ` Derrick Stolee
2020-12-14 16:21 ` [PATCH v2 10/11] merge-ort: add implementation of normal rename handling Elijah Newren via GitGitGadget
2020-12-15 14:27 ` Derrick Stolee
2020-12-14 16:21 ` [PATCH v2 11/11] merge-ort: add implementation of type-changed " Elijah Newren via GitGitGadget
2020-12-15 14:31 ` Derrick Stolee
2020-12-15 17:11 ` Elijah Newren
2020-12-15 14:34 ` [PATCH v2 00/11] merge-ort: add basic rename detection Derrick Stolee
2020-12-15 22:09 ` Junio C Hamano
2020-12-15 18:27 ` Elijah Newren via GitGitGadget [this message]
2020-12-15 18:27 ` [PATCH v3 01/11] merge-ort: add basic data structures for handling renames Elijah Newren via GitGitGadget
2020-12-15 18:27 ` [PATCH v3 02/11] merge-ort: add initial outline for basic rename detection Elijah Newren via GitGitGadget
2020-12-15 18:27 ` [PATCH v3 03/11] merge-ort: implement detect_regular_renames() Elijah Newren via GitGitGadget
2020-12-15 18:27 ` [PATCH v3 04/11] merge-ort: implement compare_pairs() and collect_renames() Elijah Newren via GitGitGadget
2020-12-15 18:28 ` [PATCH v3 05/11] merge-ort: add basic outline for process_renames() Elijah Newren via GitGitGadget
2020-12-15 18:28 ` [PATCH v3 06/11] merge-ort: add implementation of both sides renaming identically Elijah Newren via GitGitGadget
2020-12-15 18:28 ` [PATCH v3 07/11] merge-ort: add implementation of both sides renaming differently Elijah Newren via GitGitGadget
2020-12-15 18:28 ` [PATCH v3 08/11] merge-ort: add implementation of rename/delete conflicts Elijah Newren via GitGitGadget
2020-12-15 18:28 ` [PATCH v3 09/11] merge-ort: add implementation of rename collisions Elijah Newren via GitGitGadget
2020-12-15 18:28 ` [PATCH v3 10/11] merge-ort: add implementation of normal rename handling Elijah Newren via GitGitGadget
2020-12-15 18:28 ` [PATCH v3 11/11] merge-ort: add implementation of type-changed " Elijah Newren via GitGitGadget
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.812.v3.git.1608056886.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=newren@gmail.com \
--cc=stolee@gmail.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.
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 NNTP newsgroup(s).