Skip to content

Improve git-status --ignored

Karsten Blees git 2 versions In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest14 patches 11 repliesIn review
  2. v18 patches 2 repliesSuperseded

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/14dir.c: git-status --ignored: don't drop ignored directoriesdir.c t/t7061-wtstatus-ignore.sh+36 -02 replies
2/14dir.c: git-status --ignored: don't list files in ignored directoriesdir.c t/t7061-wtstatus-ignore.sh+28 -32 replies
3/14dir.c: git-status --ignored: don't list empty ignored directoriesdir.c t/t7061-wtstatus-ignore.sh+28 -72 replies
4/14dir.c: git-ls-files --directories: don't hide empty directoriesdir.c t/t3001-ls-files-others-exclude.sh wt-status.c+26 -50 replies
5/14dir.c: git-status --ignored: don't list empty directories as ignoreddir.c t/t7061-wtstatus-ignore.sh+27 -40 replies
6/14dir.c: make 'git-status --ignored' work within leading directoriesdir.c t/t7061-wtstatus-ignore.sh+22 -00 replies
7/14dir.c: git-clean -d -X: don't delete tracked directoriesdir.c t/t3001-ls-files-others-exclude.sh t/t7061-wtstatus-ignore.sh +1 more+66 -110 replies
8/14dir.c: factor out parts of last_exclude_matching for later reusedir.c+22 -140 replies
9/14dir.c: move prep_excludedir.c+72 -720 replies
10/14dir.c: unify is_excluded and is_path_excluded APIsdir.c dir.h+46 -671 reply
11/14dir.c: replace is_path_excluded with now equivalent is_excluded APIbuiltin/add.c builtin/check-ignore.c builtin/ls-files.c +4 more+16 -1160 replies
11/14dir.c: replace is_path_excluded with now equivalent is_excluded APIbuiltin/add.c builtin/check-ignore.c builtin/ls-files.c +4 more+21 -1210 replies
12/14dir.c: git-status: avoid is_excluded checks for tracked filesdir.c+11 -270 replies
13/14dir.c: git-status --ignored: don't scan the work tree three timesdir.c+72 -740 replies
14/14dir.c: git-status --ignored: don't scan the work tree twiceDocumentation/technical/api-directory-listing.txt builtin/check-ignore.c dir.c +2 more+41 -220 replies
14/14dir.c: git-status --ignored: don't scan the work tree twiceDocumentation/technical/api-directory-listing.txt builtin/check-ignore.c dir.c +2 more+41 -220 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.

Read the v2 thread

Cover letter [PATCH v2 00/14] Improve git-status --ignored

This patch series addresses several bugs and performance issues in .gitignore processing.

Patches #1 - #6 fix bugs and add appropriate test cases.

Patch #7 changes handling of "ignored tracked" directories, as I discovered that with the current bahavior git-clean can delete tracked content.

Patches #8 - #14 are performance optimizations.

Also available here:
https://github.com/kblees/git/tree/kb/improve-git-status-ignored-v2
git pull git://github.com/kblees/git.git kb/improve-git-status-ignored-v2

Changes since v1 (old#->new#: description):

1->1: dir.c: git-status --ignored: don't drop ignored directories 2->2: dir.c: git-status --ignored: don't list files in ignored directories 3->3: dir.c: git-status --ignored: don't list empty ignored directories

*->4: dir.c: git-ls-files --directories: don't hide empty directories
- new bugfix

4->5: dir.c: git-status --ignored: don't list empty directories as ignored
- fixed typo in commit message thanks to Eric Sunshine
- patch is reduced to a one-liner (the DIR_HIDE_EMPTY_DIRECTORIES flag has already been fixed in patch 4, renaming the variable and tweaking DIR_SHOW_OTHER_DIRECTORIES is not strictly necessary)

*->6: dir.c: make 'git-status --ignored' work within leading directories
- new bugfix

*->7: dir.c: git-clean -d -X: don't delete tracked directories
- changes handling of "ignored tracked" directories

5->8: dir.c: factor out parts of last_exclude_matching for later reuse 5->9: dir.c: move prep_exclude
- split in two patches for cleaner diff
- removed unnecessary ';' after '}'

6->10: dir.c: unify is_excluded and is_path_excluded APIs
- fixed another typo in commit message

7->11: dir.c: replace is_path_excluded with now equivalent is_excluded API 8->12: dir.c: git-status: avoid is_excluded checks for tracked files

*->13: dir.c: git-status --ignored: don't scan the work tree three times
- new optimization

*->14: dir.c: git-status --ignored: don't scan the work tree twice
- new optimization

Karsten Blees (14):
dir.c: git-status --ignored: don't drop ignored directories dir.c: git-status --ignored: don't list files in ignored directories dir.c: git-status --ignored: don't list empty ignored directories dir.c: git-ls-files --directories: don't hide empty directories dir.c: git-status --ignored: don't list empty directories as ignored dir.c: make 'git-status --ignored' work within leading directories dir.c: git-clean -d -X: don't delete tracked directories dir.c: factor out parts of last_exclude_matching for later reuse dir.c: move prep_exclude
dir.c: unify is_excluded and is_path_excluded APIs
dir.c: replace is_path_excluded with now equivalent is_excluded API dir.c: git-status: avoid is_excluded checks for tracked files dir.c: git-status --ignored: don't scan the work tree three times dir.c: git-status --ignored: don't scan the work tree twice

 Documentation/technical/api-directory-listing.txt |  25 +-
 builtin/add.c                                     |   5 +-
 builtin/check-ignore.c                            |   7 +-
 builtin/ls-files.c                                |  15 +-
 dir.c                                             | 499 +++++++++-------------
 dir.h                                             |  25 +-
 t/t3001-ls-files-others-exclude.sh                |  49 +++
 t/t7061-wtstatus-ignore.sh                        | 125 +++++-
 t/t7300-clean.sh                                  |  34 ++
 unpack-trees.c                                    |  10 +-
 unpack-trees.h                                    |   1 -
 wt-status.c                                       |  24 +-
 12 files changed, 455 insertions(+), 364 deletions(-)