threads / bug / 50918

Bug(feature?) on git-diff-files

Subject: Bug(feature?) on git-diff-files

## tl;dr

4 messages between Apr 11, 2019 and Apr 12, 2019.

replies: 3people: 3as markdown or json

NoName Req· Apr 11, 2019, 12:47 UTC · lore
Summary
   `git -C (folder path) diff-files --name-only` output is not correct
Steps to Reproduce
1. Apply change to a clean git repository. Go to another folder (not
within this repository) and apply the command
   `git -C repo-path diff-files --name-only`
The above command lists dirty files in that repository.
2. Now undo your changes on the repository
3. Issue the same command. It still lists the file.
More Information
`git -C repo-path diff`  command doesn't seem to have this problem.
System Information

Arch Linux 5.0.7-arch1-1-ARCH git version 2.21.0

Jeff King· Apr 11, 2019, 12:57 UTC · re: NoName Req · lore

Re: Bug(feature?) on git-diff-files

On Thu, Apr 11, 2019 at 03:47:58PM +0300, NoName Req wrote:
Show 14 quoted lines
> Summary
>    `git -C (folder path) diff-files --name-only` output is not correct
> 
> Steps to Reproduce
> 1. Apply change to a clean git repository. Go to another folder (not
> within this repository) and apply the command
>    `git -C repo-path diff-files --name-only`
> The above command lists dirty files in that repository.
> 2. Now undo your changes on the repository
> 3. Issue the same command. It still lists the file.
> 
> More Information
> 
> `git -C repo-path diff`  command doesn't seem to have this problem.
Try running `git update-index --refresh` before running `diff-files`.

Unlike git-diff, git-diff-files is plumbing that is meant to be called from scripts. So it is up to the script writer to decide when the index should be refreshed from the actual filesystem (which makes sense, e.g., if you're going to do it once at the start of the script and then make a bunch of separate diff-related calls).

Until that happens, diff-files will see only that the entry is stat-dirty, and report it as a potential change.

-Peff
Duy Nguyen· Apr 11, 2019, 12:56 UTC · re: NoName Req · lore

Re: Bug(feature?) on git-diff-files

On Thu, Apr 11, 2019 at 7:49 PM NoName Req <nonamereq29@gmail.com> wrote:
Show 15 quoted lines
>
> Summary
>    `git -C (folder path) diff-files --name-only` output is not correct
>
> Steps to Reproduce
> 1. Apply change to a clean git repository. Go to another folder (not
> within this repository) and apply the command
>    `git -C repo-path diff-files --name-only`
> The above command lists dirty files in that repository.
> 2. Now undo your changes on the repository
> 3. Issue the same command. It still lists the file.
>
> More Information
>
> `git -C repo-path diff`  command doesn't seem to have this problem.

I haven't tried to reproduce. But my first impression is diff-files, as a low-level plumbing sometimes requires you to refresh the index first. Sometimes without that, you'll get wrong output.

"git diff" is a more high-level command that always refreshes the index internally.

Show 5 quoted lines
>
> System Information
>
> Arch Linux 5.0.7-arch1-1-ARCH
> git version 2.21.0
-- 
Duy
NoName Req· Apr 12, 2019, 12:41 UTC · re: Duy Nguyen · lore

Re: Bug(feature?) on git-diff-files

Okay thanks for the reply. I didn't know about git update-index will try that now.

On Thu, Apr 11, 2019 at 3:57 PM Duy Nguyen <pclouds@gmail.com> wrote:
Show 35 quoted lines
>
> On Thu, Apr 11, 2019 at 7:49 PM NoName Req <nonamereq29@gmail.com> wrote:
> >
> > Summary
> >    `git -C (folder path) diff-files --name-only` output is not correct
> >
> > Steps to Reproduce
> > 1. Apply change to a clean git repository. Go to another folder (not
> > within this repository) and apply the command
> >    `git -C repo-path diff-files --name-only`
> > The above command lists dirty files in that repository.
> > 2. Now undo your changes on the repository
> > 3. Issue the same command. It still lists the file.
> >
> > More Information
> >
> > `git -C repo-path diff`  command doesn't seem to have this problem.
>
> I haven't tried to reproduce. But my first impression is diff-files,
> as a low-level plumbing sometimes requires you to refresh the index
> first. Sometimes without that, you'll get wrong output.
>
> "git diff" is a more high-level command that always refreshes the
> index internally.
>
> >
> > System Information
> >
> > Arch Linux 5.0.7-arch1-1-ARCH
> > git version 2.21.0
>
>
>
> --
> Duy

← back to recent threads