From 49806e9bc4650ec1112246292fcfe3941eb99268 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Thu, 9 Feb 2017 16:52:03 +0000 Subject: [PATCH 1/3] merge_trees: introduce test for submodule renames Test that shows that submodules are incorrectly considered in renames, and `git_merge_trees` will fail to lookup the submodule as a blob. --- tests/merge/trees/renames.c | 22 ++++++++++++++++++ .../2a/f2d9bcbc73723ac988bb202d4397f72a6ca7a0 | Bin 0 -> 105 bytes .../37/f53a5a14f64e91089a39ea58e71c87d81df765 | Bin 0 -> 173 bytes .../4d/d1ef7569b18d92d93c0a35bb6b93049137b355 | Bin 0 -> 30 bytes .../63/ec604d491161ddafdae4179843c26d54bd999a | Bin 0 -> 30 bytes .../68/f7c02064019d89e40e51d7776b6f67914420a2 | Bin 0 -> 105 bytes .../94/29c05dd6f6f39fc567b4ce923b16df5d3d7a7a | Bin 0 -> 94 bytes .../a1/07e18a58f38c46086c8f8f1dcd54c40154eeb6 | Bin 0 -> 138 bytes .../a2/d8d1824c68541cca94ffb90f79291eba495921 | Bin 0 -> 30 bytes .../bc/85d1aad435ff3705a8c30ace85f7542c5736cb | Bin 0 -> 104 bytes .../c8/26ef8b17b5cd2c4a0023f265f3a423b3aa0388 | Bin 0 -> 157 bytes .../cd/3e8d4aa06bdc781f264171030bc28f2b370fee | Bin 0 -> 94 bytes .../e2/6b8888956137218d8589368a3e606cf50fbb56 | Bin 0 -> 105 bytes .../e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 | Bin 0 -> 15 bytes .../f9/7da95f156121bea8f978623628f4cbdbf30b36 | Bin 0 -> 159 bytes .../.gitted/refs/heads/submodule_rename1 | Bin 0 -> 41 bytes .../.gitted/refs/heads/submodule_rename2 | Bin 0 -> 41 bytes 17 files changed, 22 insertions(+) create mode 100644 tests/resources/merge-resolve/.gitted/objects/2a/f2d9bcbc73723ac988bb202d4397f72a6ca7a0 create mode 100644 tests/resources/merge-resolve/.gitted/objects/37/f53a5a14f64e91089a39ea58e71c87d81df765 create mode 100644 tests/resources/merge-resolve/.gitted/objects/4d/d1ef7569b18d92d93c0a35bb6b93049137b355 create mode 100644 tests/resources/merge-resolve/.gitted/objects/63/ec604d491161ddafdae4179843c26d54bd999a create mode 100644 tests/resources/merge-resolve/.gitted/objects/68/f7c02064019d89e40e51d7776b6f67914420a2 create mode 100644 tests/resources/merge-resolve/.gitted/objects/94/29c05dd6f6f39fc567b4ce923b16df5d3d7a7a create mode 100644 tests/resources/merge-resolve/.gitted/objects/a1/07e18a58f38c46086c8f8f1dcd54c40154eeb6 create mode 100644 tests/resources/merge-resolve/.gitted/objects/a2/d8d1824c68541cca94ffb90f79291eba495921 create mode 100644 tests/resources/merge-resolve/.gitted/objects/bc/85d1aad435ff3705a8c30ace85f7542c5736cb create mode 100644 tests/resources/merge-resolve/.gitted/objects/c8/26ef8b17b5cd2c4a0023f265f3a423b3aa0388 create mode 100644 tests/resources/merge-resolve/.gitted/objects/cd/3e8d4aa06bdc781f264171030bc28f2b370fee create mode 100644 tests/resources/merge-resolve/.gitted/objects/e2/6b8888956137218d8589368a3e606cf50fbb56 create mode 100644 tests/resources/merge-resolve/.gitted/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 create mode 100644 tests/resources/merge-resolve/.gitted/objects/f9/7da95f156121bea8f978623628f4cbdbf30b36 create mode 100644 tests/resources/merge-resolve/.gitted/refs/heads/submodule_rename1 create mode 100644 tests/resources/merge-resolve/.gitted/refs/heads/submodule_rename2 diff --git a/tests/merge/trees/renames.c b/tests/merge/trees/renames.c index 6f5c36b0a..853bf2fa0 100644 --- a/tests/merge/trees/renames.c +++ b/tests/merge/trees/renames.c @@ -252,3 +252,25 @@ void test_merge_trees_renames__no_rename_index(void) git_index_free(index); } + +void test_merge_trees_renames__submodules(void) +{ + git_index *index; + git_merge_options *opts = NULL; + + struct merge_index_entry merge_index_entries[] = { + { 0100644, "cd3e8d4aa06bdc781f264171030bc28f2b370fee", 0, ".gitmodules" }, + { 0100644, "4dd1ef7569b18d92d93c0a35bb6b93049137b355", 1, "file.txt" }, + { 0100644, "a2d8d1824c68541cca94ffb90f79291eba495921", 2, "file.txt" }, + { 0100644, "63ec604d491161ddafdae4179843c26d54bd999a", 3, "file.txt" }, + { 0160000, "0000000000000000000000000000000000000001", 1, "submodule1" }, + { 0160000, "0000000000000000000000000000000000000002", 3, "submodule1" }, + { 0160000, "0000000000000000000000000000000000000003", 0, "submodule2" }, + }; + + cl_git_pass(merge_trees_from_branches(&index, repo, + "submodule_rename1", "submodule_rename2", + opts)); + cl_assert(merge_test_index(index, merge_index_entries, 7)); + git_index_free(index); +} diff --git a/tests/resources/merge-resolve/.gitted/objects/2a/f2d9bcbc73723ac988bb202d4397f72a6ca7a0 b/tests/resources/merge-resolve/.gitted/objects/2a/f2d9bcbc73723ac988bb202d4397f72a6ca7a0 new file mode 100644 index 0000000000000000000000000000000000000000..0d658237b4ba290bb240ac5d9c1ff527a89e1741 GIT binary patch literal 105 zcmV-v0G9uF0V^p=O;s>7G-fa~FfcPQQP4}zEXmDJDa}bOW|*RRAokj~&-0I_Z#g%~ zTI_zTZB-RiSz2aJs$NM&34`y&_obN|dnetr;WFKwJ(*>q`Q}hVGXo${C@xKcm}JO+ L1uy~t!KWs;EQ2k& literal 0 HcmV?d00001 diff --git a/tests/resources/merge-resolve/.gitted/objects/37/f53a5a14f64e91089a39ea58e71c87d81df765 b/tests/resources/merge-resolve/.gitted/objects/37/f53a5a14f64e91089a39ea58e71c87d81df765 new file mode 100644 index 0000000000000000000000000000000000000000..95327ed646a2eba6ea6300c37a1d263d958f1c59 GIT binary patch literal 173 zcmV;e08;;W0hNwHYC|y$M7#DWv=0>7k!5`dB@lXpUcld$<1GGna2;~}I*Q!X znbfxJHozUj$LOlSQbIz9OlX%ZixR50IfTF~7Y>Uhau}Vt$FBQ;Xfddj=%pMb5uuuD>`kC7H1(t-_&n*WBoH8?= bFNgk7G-fa~FfcPQQP4}zEXmDJDa}bOW|*RRAokj~&-0I_Z#g%~ zTI_zTZB-RiSz2aJs$NM&2}AOm1Yb|V#JlTnJrSSbd?+_$@61_-W(Gi@P+Xb>G0Bht L3t$2O+MFkY^RX-m literal 0 HcmV?d00001 diff --git a/tests/resources/merge-resolve/.gitted/objects/94/29c05dd6f6f39fc567b4ce923b16df5d3d7a7a b/tests/resources/merge-resolve/.gitted/objects/94/29c05dd6f6f39fc567b4ce923b16df5d3d7a7a new file mode 100644 index 0000000000000000000000000000000000000000..d4d93f508ab6fc65950f32f421195b5807187be1 GIT binary patch literal 94 zcmV-k0HObQ0ZYosPg1ZnV~8#;P0GzrDa}b$P=YfJm14O#3ld8*6l@g`f?S-XML9r` zjFOUqVk>?9^vsfs(j>j){9OH<%p@SsNIxXCxWqlPBq+5Yzc{lbzo?Q605*3d5oL`i Au>b%7 literal 0 HcmV?d00001 diff --git a/tests/resources/merge-resolve/.gitted/objects/a1/07e18a58f38c46086c8f8f1dcd54c40154eeb6 b/tests/resources/merge-resolve/.gitted/objects/a1/07e18a58f38c46086c8f8f1dcd54c40154eeb6 new file mode 100644 index 0000000000000000000000000000000000000000..598c6a7a6186514b0253e8d82027a523326d64c6 GIT binary patch literal 138 zcmV;50CoR(0iBIY3IZ_@1zqP9y%!{t#C%{7H!j?JfzD@~29rQ0qt`cH!CE~E9u;cN z)M2vj&|69%a1qh@;DeDyNDR(e?*$i8NoN)#PzN-~8SZ_p4Q}y+Ey821d8-BHH0*C( spVZggpF+(Sn3UD}Y^+vrlpWO>}!WXpkrj2T0U&#zVNc)yRUjP6A literal 0 HcmV?d00001 diff --git a/tests/resources/merge-resolve/.gitted/objects/a2/d8d1824c68541cca94ffb90f79291eba495921 b/tests/resources/merge-resolve/.gitted/objects/a2/d8d1824c68541cca94ffb90f79291eba495921 new file mode 100644 index 0000000000000000000000000000000000000000..2d3d947184506754e5bf5963da79aecbf5243b3d GIT binary patch literal 30 mcmb7G-fa~FfcPQQP4}zEXmDJDa}bOW;kot>$M>JPKCUhV<9v5 zp?+<1{&!GiX_+~xdL8*ktR^65AOW+E|z*Ee3lT0II1UaY08 zT^a+2-k2pD3^bSlwVjNnL_o7e@|ICy%%E}zfa2vFZ(Vw=Cf4MEvZd%y5k|_Cb&3gG zbV`F`4k-NIm)hhleSAyuzSQ!rn>_Qdzjb}Aec8h))^d^B5h6^pHu9(jV%YJr^S`~w L>yyP7U~WeMr&~-} literal 0 HcmV?d00001 diff --git a/tests/resources/merge-resolve/.gitted/objects/cd/3e8d4aa06bdc781f264171030bc28f2b370fee b/tests/resources/merge-resolve/.gitted/objects/cd/3e8d4aa06bdc781f264171030bc28f2b370fee new file mode 100644 index 0000000000000000000000000000000000000000..144225df1f2f40f321360fcac0ebcf9b8ef0b560 GIT binary patch literal 94 zcmV-k0HObQ0ZYosPg1ZnV~8#;P0GzrDa}b$P=Yg!lw!F!3ld8*6l@g`f?S-XML9r` zjFOUqVk>?9^vsfs(j>j){9OH<%p@SsNIxXCxWqlPBq+5Yzc{lbzo?Q6057G-fa~FfcPQQP4}zEXmDJDa}bOW|*RRAokj~&-0I_Z#g%~ zTI_zTZB-RiSz2aJs$NM&2}AOm1Yb|V#JlTnJrSSbd?+_$@61_-W(Gi@P+Xb>G0Bht L3t$8Q+M6eW^SLYu literal 0 HcmV?d00001 diff --git a/tests/resources/merge-resolve/.gitted/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 b/tests/resources/merge-resolve/.gitted/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 new file mode 100644 index 0000000000000000000000000000000000000000..711223894375fe1186ac5bfffdc48fb1fa1e65cc GIT binary patch literal 15 Wcmb Date: Thu, 9 Feb 2017 16:57:22 +0000 Subject: [PATCH 2/3] merge: don't do rename detection on submodules --- src/merge.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/merge.c b/src/merge.c index 087178ace..eceadf08a 100644 --- a/src/merge.c +++ b/src/merge.c @@ -1075,7 +1075,7 @@ static int index_entry_similarity_inexact( int score = 0; int error = 0; - if (GIT_MODE_TYPE(a->mode) != GIT_MODE_TYPE(b->mode)) + if (!GIT_MODE_ISBLOB(a->mode) || !GIT_MODE_ISBLOB(b->mode)) return 0; /* update signature cache if needed */ From 191474a1f423aaea6f0b9dacf68216b3ba8e34d4 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Thu, 9 Feb 2017 18:28:19 +0000 Subject: [PATCH 3/3] diff: don't do rename detection on submodules --- src/diff_tform.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/diff_tform.c b/src/diff_tform.c index f2ff147d1..b004ddd66 100644 --- a/src/diff_tform.c +++ b/src/diff_tform.c @@ -553,8 +553,8 @@ static int similarity_measure( *score = -1; - /* don't try to compare files of different types */ - if (GIT_MODE_TYPE(a_file->mode) != GIT_MODE_TYPE(b_file->mode)) + /* don't try to compare things that aren't files */ + if (!GIT_MODE_ISBLOB(a_file->mode) || !GIT_MODE_ISBLOB(b_file->mode)) return 0; /* if exact match is requested, force calculation of missing OIDs now */