diff --git a/combine-diff.c b/combine-diff.c index 3878faabe7bb2f..305414efdf436d 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -1515,7 +1515,6 @@ void diff_tree_combined(const struct object_id *oid, diffopts = *opt; copy_pathspec(&diffopts.pathspec, &opt->pathspec); - diffopts.flags.recursive = 1; diffopts.flags.allow_external = 0; /* find set of paths that everybody touches diff --git a/submodule.c b/submodule.c index fff3c755703163..1c273ec87fa865 100644 --- a/submodule.c +++ b/submodule.c @@ -916,6 +916,7 @@ static void collect_changed_submodules(struct repository *r, diff_rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK; diff_rev.diffopt.format_callback = collect_changed_submodules_cb; diff_rev.diffopt.format_callback_data = &data; + diff_rev.diffopt.flags.recursive = 1; diff_rev.dense_combined_merges = 1; diff_tree_combined_merge(commit, &diff_rev); release_revisions(&diff_rev); diff --git a/t/t4013/diff.diff-tree_-c_--abbrev_master b/t/t4013/diff.diff-tree_-c_--abbrev_master index b8e4aa2530717a..1f00877ca5ee51 100644 --- a/t/t4013/diff.diff-tree_-c_--abbrev_master +++ b/t/t4013/diff.diff-tree_-c_--abbrev_master @@ -1,5 +1,5 @@ $ git diff-tree -c --abbrev master 59d314ad6f356dd08601a4cd5e530381da3e3c64 -::100644 100644 100644 cead32e... 7289e35... 992913c... MM dir/sub +::040000 040000 040000 65f5c9d... f977ed4... 0564e02... MM dir ::100644 100644 100644 b414108... f4615da... 10a8a9f... MM file0 $ diff --git a/t/t4013/diff.diff-tree_-c_-r_master b/t/t4013/diff.diff-tree_-c_-r_master new file mode 100644 index 00000000000000..8980be87440791 --- /dev/null +++ b/t/t4013/diff.diff-tree_-c_-r_master @@ -0,0 +1,5 @@ +$ git diff-tree -c -r master +59d314ad6f356dd08601a4cd5e530381da3e3c64 +::100644 100644 100644 cead32e925b1420c84c14cbf7cf755e7e45af8ad 7289e35bff32727c08dda207511bec138fdb9ea5 992913c5aa0a5476d10c49ed0f21fc0c6d1aedf3 MM dir/sub +::100644 100644 100644 b414108e81e5091fe0974a1858b4d0d22b107f70 f4615da674c09df322d6ba8d6b21ecfb1b1ba510 10a8a9f3657f91a156b9f0184ed79a20adef9f7f MM file0 +$ diff --git a/t/t4013/diff.diff-tree_-c_master b/t/t4013/diff.diff-tree_-c_master index e2d2bb26114ac8..1ecc2cfc6c50e9 100644 --- a/t/t4013/diff.diff-tree_-c_master +++ b/t/t4013/diff.diff-tree_-c_master @@ -1,5 +1,5 @@ $ git diff-tree -c master 59d314ad6f356dd08601a4cd5e530381da3e3c64 -::100644 100644 100644 cead32e925b1420c84c14cbf7cf755e7e45af8ad 7289e35bff32727c08dda207511bec138fdb9ea5 992913c5aa0a5476d10c49ed0f21fc0c6d1aedf3 MM dir/sub +::040000 040000 040000 65f5c9dd60ce3b2b3324b618ac7accf8d912c113 f977ed46ae6873c1c30ab878e15a4accedc3618b 0564e026437809817a64fff393079714b6dd4628 MM dir ::100644 100644 100644 b414108e81e5091fe0974a1858b4d0d22b107f70 f4615da674c09df322d6ba8d6b21ecfb1b1ba510 10a8a9f3657f91a156b9f0184ed79a20adef9f7f MM file0 $ diff --git a/t/t4013/diff.noellipses-diff-tree_-c_--abbrev_master b/t/t4013/diff.noellipses-diff-tree_-c_--abbrev_master index bb80f013b37da0..62d655dac240a8 100644 --- a/t/t4013/diff.noellipses-diff-tree_-c_--abbrev_master +++ b/t/t4013/diff.noellipses-diff-tree_-c_--abbrev_master @@ -1,5 +1,5 @@ $ git diff-tree -c --abbrev master 59d314ad6f356dd08601a4cd5e530381da3e3c64 -::100644 100644 100644 cead32e 7289e35 992913c MM dir/sub +::040000 040000 040000 65f5c9d f977ed4 0564e02 MM dir ::100644 100644 100644 b414108 f4615da 10a8a9f MM file0 $ diff --git a/t/t8020-last-modified.sh b/t/t8020-last-modified.sh index 5eb4cef0359212..ff837a40f40b8c 100755 --- a/t/t8020-last-modified.sh +++ b/t/t8020-last-modified.sh @@ -128,6 +128,22 @@ test_expect_success 'only last-modified files in the current tree' ' EOF ' +test_expect_success 'last-modified with files in a subdir merged' ' + git checkout -b branch-k1 1 && + mkdir a k && + test_commit k1 a/file2 && + git checkout -b branch-k2 && + test_commit k2 k/file2 && + git checkout branch-k1 && + test_merge km2 branch-k2 && + test_merge km3 3 && + check_last_modified <<-\EOF + km3 a + k2 k + 1 file + EOF +' + test_expect_success 'cross merge boundaries in blaming' ' git checkout HEAD^0 && git rm -rf . &&