Re: [PATCH] diff: ignore unmerged paths outside prefix with --relative --cached
Junio C Hamano <[email protected]>
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <[email protected]> |
Jeff King <[email protected]> writes: > diff --git a/diff-lib.c b/diff-lib.c > index ae91027a02..a23119b852 100644 > --- a/diff-lib.c > +++ b/diff-lib.c > @@ -467,7 +467,7 @@ static void do_oneway_diff(struct unpack_trees_options *o, > if (cached && idx && ce_stage(idx)) { > struct diff_filepair *pair; > pair = diff_unmerge(&revs->diffopt, idx->name); > - if (tree) > + if (pair && tree) > fill_filespec(pair->one, &tree->oid, 1, > tree->ce_mode); > return; OK, so if diff_unmerge() gives a NULL for a path outside out area of interest, we of course do not fill the filepair and return. We won't do any further processing, like showing the entry or recursing into it, and diff_queued_diff hasn't been told about this path (as diff_unmerge() returns NULL before queuing the pair), so it is the end of story for this path here. Looks good to me. > diff --git a/t/t4045-diff-relative.sh b/t/t4045-diff-relative.sh > index 2c8493fe66..167be0bdcc 100755 > --- a/t/t4045-diff-relative.sh > +++ b/t/t4045-diff-relative.sh > @@ -245,4 +245,13 @@ test_expect_failure 'diff --relative with change in subdir' ' > test_cmp expected out > ' > > +test_expect_success 'diff --relative --cached with change in subdir' ' > + git switch br3 && > + test_when_finished "git merge --abort" && > + test_must_fail git merge sub1 && > + echo file0 >expected && > + git -C subdir diff --relative --name-only --cached >out && > + test_cmp expected out > +' > + > test_done