On Thu, Jan 18, 2024 at 7:06 PM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Elijah Newren <newren@xxxxxxxxx> writes: > > >> Heh, I was hoping that we should be able to use "diff --name-only". > >> > >> $ git mv Makefile Breakfile > >> $ git diff --name-only -M HEAD > >> Breakfile > >> $ git reset --hard > >> $ git rm Makefile > >> $ >Breakfile && git add Breakfile > >> $ git diff --name-only -M HEAD > >> Breakfile > >> Makefile > >> $ git reset --hard > > > > I guess we could, since the only thing in this repository is a file > > which is being renamed, and we can then deduce based on the setup that > > the change we expected must have happened. > > > > However, I didn't like the deduce bit; since --name-only only lists > > one of the two filenames and doesn't provide any hint that the change > > involved is a rename, it felt to me like using --name-only would make > > the test not really be a rename test. > > Hmph, I am not quite seeing what you are saying. If the "mv" from > Makefile to Breakfile in the above example is between preimage and > postimage that are similar enough, then we will see "one" paths, > i.e. the file in the "after" side of the diff. But if the "mv" from > Makefile to Breakfile involves too large a content change (like, > say, going from 3800+ lines to an empty file, in the second example > above), then because such a change from Makefile to Breakfile is too > dissimilar, we do not judge it as "renamed" and show "two" paths. I > do not quite see where we need to "deduce". You just wrote a very well worded paragraph going through the reasoning involved to prove that a rename is involved. You reasoned, or deduced, the necessary conclusion quite well. Sure, it might be a simple deduction given the knowledge of the test setup, but it's still a deduction. But perhaps I can put it another way: You can't just look at the output of `diff --name-only` and say a rename was involved -- unless you know the test setup and the previous operations. In fact, how about a possibly contrived alternate scenario: What if `git mv $1 $2` had a bug where, after doing the expected work, it did the equivalent of running `git checkout HEAD -- $1` at the end of its operation. Then we'd see: $ <tweak Makefile slightly> $ git mv Makefile Breakfile $ git diff --name-only -M HEAD Breakfile i.e. we get the same output as without the git-mv bug (note that Makefile will not be listed since it is unmodified), but with the bug in git-mv there definitely is no rename involved (since there's no delete to pair with the addition of Breakfile). As such, we'd still pass the test despite there being no rename. Sure, the example is somewhat contrived, but I'm just saying that the --name-only output doesn't actually test or prove that a rename occurred. And since this test, and all other tests in this particular testfile, are specifically about renames, the fact that we aren't specifically testing for something being renamed feels odd to me. If you still like `diff --name-only` better anyway, that's fine and I'll switch it. I'm just stating why it seems suboptimal to me.