Merge branch 'tc/last-modified-recursive-fix'
"git last-modified" operating in non-recursive mode used to trigger a BUG(), which has been corrected. * tc/last-modified-recursive-fix: last-modified: fix bug when some paths remain unhandledmain
commit
d5518d52b2
|
@ -265,6 +265,7 @@ static int last_modified_init(struct last_modified *lm, struct repository *r,
|
||||||
lm->rev.boundary = 1;
|
lm->rev.boundary = 1;
|
||||||
lm->rev.no_commit_id = 1;
|
lm->rev.no_commit_id = 1;
|
||||||
lm->rev.diff = 1;
|
lm->rev.diff = 1;
|
||||||
|
lm->rev.diffopt.flags.no_recursive_diff_tree_combined = 1;
|
||||||
lm->rev.diffopt.flags.recursive = lm->recursive;
|
lm->rev.diffopt.flags.recursive = lm->recursive;
|
||||||
lm->rev.diffopt.flags.tree_in_recursive = lm->show_trees;
|
lm->rev.diffopt.flags.tree_in_recursive = lm->show_trees;
|
||||||
|
|
||||||
|
|
|
@ -1515,8 +1515,9 @@ void diff_tree_combined(const struct object_id *oid,
|
||||||
|
|
||||||
diffopts = *opt;
|
diffopts = *opt;
|
||||||
copy_pathspec(&diffopts.pathspec, &opt->pathspec);
|
copy_pathspec(&diffopts.pathspec, &opt->pathspec);
|
||||||
diffopts.flags.recursive = 1;
|
|
||||||
diffopts.flags.allow_external = 0;
|
diffopts.flags.allow_external = 0;
|
||||||
|
if (!opt->flags.no_recursive_diff_tree_combined)
|
||||||
|
diffopts.flags.recursive = 1;
|
||||||
|
|
||||||
/* find set of paths that everybody touches
|
/* find set of paths that everybody touches
|
||||||
*
|
*
|
||||||
|
|
7
diff.h
7
diff.h
|
@ -127,6 +127,13 @@ struct diff_flags {
|
||||||
unsigned recursive;
|
unsigned recursive;
|
||||||
unsigned tree_in_recursive;
|
unsigned tree_in_recursive;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Historically diff_tree_combined() overrides recursive to 1. To
|
||||||
|
* suppress this behavior, set the flag below.
|
||||||
|
* It has no effect if recursive is already set to 1.
|
||||||
|
*/
|
||||||
|
unsigned no_recursive_diff_tree_combined;
|
||||||
|
|
||||||
/* Affects the way how a file that is seemingly binary is treated. */
|
/* Affects the way how a file that is seemingly binary is treated. */
|
||||||
unsigned binary;
|
unsigned binary;
|
||||||
unsigned text;
|
unsigned text;
|
||||||
|
|
|
@ -128,6 +128,22 @@ test_expect_success 'only last-modified files in the current tree' '
|
||||||
EOF
|
EOF
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'last-modified with subdir and criss-cross merge' '
|
||||||
|
git checkout -b branch-k1 1 &&
|
||||||
|
mkdir -p 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' '
|
test_expect_success 'cross merge boundaries in blaming' '
|
||||||
git checkout HEAD^0 &&
|
git checkout HEAD^0 &&
|
||||||
git rm -rf . &&
|
git rm -rf . &&
|
||||||
|
|
Loading…
Reference in New Issue