Skip to content

Commit

Permalink
ls_files.c: consolidate two for loops into one
Browse files Browse the repository at this point in the history
Refactor the two for loops into one,skip showing the ce if it
has the same name as the previously shown one, only when doing so
won't lose information.

Signed-off-by: ZheNing Hu <adlternative@gmail.com>
  • Loading branch information
adlternative committed Jan 17, 2021
1 parent ec9464f commit 802ff80
Showing 1 changed file with 29 additions and 41 deletions.
70 changes: 29 additions & 41 deletions builtin/ls-files.c
Original file line number Diff line number Diff line change
Expand Up @@ -312,51 +312,39 @@ static void show_files(struct repository *repo, struct dir_struct *dir)
if (show_killed)
show_killed_files(repo->index, dir);
}
if (show_cached || show_stage) {
for (i = 0; i < repo->index->cache_nr; i++) {
const struct cache_entry *ce = repo->index->cache[i];
if (! (show_cached || show_stage || show_deleted || show_modified))
return;
for (i = 0; i < repo->index->cache_nr; i++) {
const struct cache_entry *ce = repo->index->cache[i];
struct stat st;
int err;

construct_fullname(&fullname, repo, ce);
construct_fullname(&fullname, repo, ce);

if ((dir->flags & DIR_SHOW_IGNORED) &&
!ce_excluded(dir, repo->index, fullname.buf, ce))
continue;
if (show_unmerged && !ce_stage(ce))
continue;
if (ce->ce_flags & CE_UPDATE)
continue;
show_ce(repo, dir, ce, fullname.buf,
ce_stage(ce) ? tag_unmerged :
(ce_skip_worktree(ce) ? tag_skip_worktree :
tag_cached));
if ((dir->flags & DIR_SHOW_IGNORED) &&
!ce_excluded(dir, repo->index, fullname.buf, ce))
continue;
if (ce->ce_flags & CE_UPDATE)
continue;
if (show_cached || show_stage) {
if (!show_unmerged || ce_stage(ce))
show_ce(repo, dir, ce, fullname.buf,
ce_stage(ce) ? tag_unmerged :
(ce_skip_worktree(ce) ? tag_skip_worktree :
tag_cached));
}
}
if (show_deleted || show_modified) {
for (i = 0; i < repo->index->cache_nr; i++) {
const struct cache_entry *ce = repo->index->cache[i];
struct stat st;
int err;

construct_fullname(&fullname, repo, ce);

if ((dir->flags & DIR_SHOW_IGNORED) &&
!ce_excluded(dir, repo->index, fullname.buf, ce))
continue;
if (ce->ce_flags & CE_UPDATE)
continue;
if (ce_skip_worktree(ce))
continue;
err = lstat(fullname.buf, &st);
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))
if (ce_skip_worktree(ce))
continue;
err = lstat(fullname.buf, &st);
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);
}

strbuf_release(&fullname);
Expand Down

0 comments on commit 802ff80

Please sign in to comment.