summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: d192508)
raw | patch | inline | side by side (parent: d192508)
author | Junio C Hamano <gitster@pobox.com> | |
Fri, 20 May 2011 03:17:44 +0000 (20:17 -0700) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Fri, 20 May 2011 03:33:38 +0000 (20:33 -0700) |
As the band-aid to merge-recursive seems to regress complex merges in an
unpleasant way. The merge-recursive implementation needs to be rewritten
in such a way that it resolves renames and D/F conflicts entirely in-core
and not to touch working tree at all while doing so. But in the meantime,
this reverts commit ac9666f84 that merged the topic in its entirety.
unpleasant way. The merge-recursive implementation needs to be rewritten
in such a way that it resolves renames and D/F conflicts entirely in-core
and not to touch working tree at all while doing so. But in the meantime,
this reverts commit ac9666f84 that merged the topic in its entirety.
merge-recursive.c | patch | blob | history | |
t/t6022-merge-rename.sh | patch | blob | history |
diff --git a/merge-recursive.c b/merge-recursive.c
index 07ad1a3be4432928872c05859e0fffda026c502f..db9ba19ddf94fec3a5cfff450b35f5bb7b46c35e 100644 (file)
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -341,11 +341,10 @@ static void make_room_for_directories_of_df_conflicts(struct merge_options *o,
* make room for the corresponding directory. Such paths will
* later be processed in process_df_entry() at the end. If
* the corresponding directory ends up being removed by the
- * merge, then the file will be reinstated at that time
- * (albeit with a different timestamp!); otherwise, if the
- * file is not supposed to be removed by the merge, the
- * contents of the file will be placed in another unique
- * filename.
+ * merge, then the file will be reinstated at that time;
+ * otherwise, if the file is not supposed to be removed by the
+ * merge, the contents of the file will be placed in another
+ * unique filename.
*
* NOTE: This function relies on the fact that entries for a
* D/F conflict will appear adjacent in the index, with the
int last_len = 0;
int i;
- /*
- * Do not do any of this crazyness during the recursive; we don't
- * even write anything to the working tree!
- */
- if (o->call_depth)
- return;
-
for (i = 0; i < entries->nr; i++) {
const char *path = entries->items[i].string;
int len = strlen(path);
}
if (mfi.clean && !df_conflict_remains &&
- sha_eq(mfi.sha, a_sha) && mfi.mode == a.mode &&
- !o->call_depth && !lstat(path, &st)) {
+ sha_eq(mfi.sha, a_sha) && mfi.mode == a.mode)
output(o, 3, "Skipped %s (merged same as existing)", path);
- add_cacheinfo(mfi.mode, mfi.sha, path,
- 0 /*stage*/, 1 /*refresh*/, 0 /*options*/);
- return mfi.clean;
- } else
+ else
output(o, 2, "Auto-merging %s", path);
if (!mfi.clean) {
index 5f3b604fd99b22c73cfdebf0f1cf13539e1af3e4..1ed259d864b4ef4c8c7060fa5f22634a25c8e032 100755 (executable)
--- a/t/t6022-merge-rename.sh
+++ b/t/t6022-merge-rename.sh
@@ -609,67 +609,4 @@ test_expect_success 'check handling of differently renamed file with D/F conflic
! test -f original
'
-test_expect_success 'setup avoid unnecessary update, normal rename' '
- git reset --hard &&
- git checkout --orphan avoid-unnecessary-update-1 &&
- git rm -rf . &&
- git clean -fdqx &&
-
- printf "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" >original &&
- git add -A &&
- git commit -m "Common commmit" &&
-
- git mv original rename &&
- echo 11 >>rename &&
- git add -u &&
- git commit -m "Renamed and modified" &&
-
- git checkout -b merge-branch-1 HEAD~1 &&
- echo "random content" >random-file &&
- git add -A &&
- git commit -m "Random, unrelated changes"
-'
-
-test_expect_success 'avoid unnecessary update, normal rename' '
- git checkout -q avoid-unnecessary-update-1^0 &&
- test-chmtime =1000000000 rename &&
- test-chmtime -v +0 rename >expect &&
- git merge merge-branch-1 &&
- test-chmtime -v +0 rename >actual &&
- test_cmp expect actual # "rename" should have stayed intact
-'
-
-test_expect_success 'setup to test avoiding unnecessary update, with D/F conflict' '
- git reset --hard &&
- git checkout --orphan avoid-unnecessary-update-2 &&
- git rm -rf . &&
- git clean -fdqx &&
-
- mkdir df &&
- printf "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" >df/file &&
- git add -A &&
- git commit -m "Common commmit" &&
-
- git mv df/file temp &&
- rm -rf df &&
- git mv temp df &&
- echo 11 >>df &&
- git add -u &&
- git commit -m "Renamed and modified" &&
-
- git checkout -b merge-branch-2 HEAD~1 &&
- >unrelated-change &&
- git add unrelated-change &&
- git commit -m "Only unrelated changes"
-'
-
-test_expect_failure 'avoid unnecessary update, with D/F conflict' '
- git checkout -q avoid-unnecessary-update-2^0 &&
- test-chmtime =1000000000 df &&
- test-chmtime -v +0 df >expect &&
- git merge merge-branch-2 &&
- test-chmtime -v +0 df >actual &&
- test_cmp expect actual # "df" should have stayed intact
-'
-
test_done