[PATCH v5 1/3] ls_files.c: bugfix for --deleted and --modified
- From
ZheNing Hu via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jan 19, 2021, 06:30 UTC
- Message-ID
- <ec9464f6094f111bc7b6dc1dc07ecc9997d366d4.1611037846.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.832.v5.git.1611037846.gitgitgadget@gmail.com>
From: ZheNing Hu <adlternative@gmail.com>
This situation may occur in the original code: lstat() failed but we use `&st` to feed ie_modified() later.
Therefore, we can directly execute show_ce without the judgment of ie_modified() when lstat() has failed.
Signed-off-by: ZheNing Hu <adlternative@gmail.com> --- builtin/ls-files.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/builtin/ls-files.c b/builtin/ls-files.c index c8eae899b82..f1617260064 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -347,9 +347,14 @@ static void show_files(struct repository *repo, struct dir_struct *dir) if (ce_skip_worktree(ce)) continue; err = lstat(fullname.buf, &st); - if (show_deleted && err) - show_ce(repo, dir, ce, fullname.buf, tag_removed); - if (show_modified && ie_modified(repo->index, ce, &st, 0)) + if (err) { + if (errno != ENOENT && errno != ENOTDIR) + error_errno("cannot lstat '%s'", fullname.buf); + if (show_deleted) + show_ce(repo, dir, ce, fullname.buf, tag_removed); + if (show_modified) + show_ce(repo, dir, ce, fullname.buf, tag_modified); + } else if (show_modified && ie_modified(repo->index, ce, &st, 0)) show_ce(repo, dir, ce, fullname.buf, tag_modified); } }
-- gitgitgadget