On 08/11/2017 01:39 PM, Brandon Williams wrote:
On 08/10, Jameson Miller wrote:
Teach Git to optionally show ignored directories when showing all
untracked files. The git status command exposes the options to report
ignored and/or untracked files. However, when reporting all untracked
files (--untracked-files=all), all individual ignored files are reported
as well. It is not currently possible to get the reporting behavior of
the --ignored flag, while also reporting all untracked files. This
change exposes a flag to report all untracked files while not showing
individual files in ignored directories.
Motivation:
Our application (Visual Studio) needs all untracked files listed
individually, but does not need all ignored files listed individually.
Reporting all ignored files can affect the time it takes for status
to run. For a representative repository, here are some measurements
showing a large perf improvement for this scenario:
| Command | Reported ignored entries | Time (s) |
| ------- | ------------------------ | -------- |
| 1 | 0 | 1.3 |
| 2 | 1024 | 4.2 |
| 3 | 174904 | 7.5 |
| 4 | 1046 | 1.6 |
Commands:
1) status
2) status --ignored
3) status --ignored --untracked-files=all
4) status --ignored --untracked-files=all --show-ignored-directory
This changes exposes a --show-ignored-directory flag to the git status
command. This flag is utilized when running git status with the
--ignored and --untracked-files options to not list ignored individual
ignored files contained in directories that match an ignore pattern.
I can't help feeling that there is a better way express this with a
better UI. I'm not saying this is wrong, I'm just not sure how
--show-ignored-directory would work when not paired with --ignored and
--untracked-files. Does it require --ignored to also be given?
Yes. This flag only has meaning when --ignored and --untracked=all
are specified. I am open to other suggestions on how to express this.
Another option might be to modify the "--ignored" flag to take an
argument, which would allow more explicit control over how ignored
paths are reported. This way, we could specify (for example)
"--ignored=explicit" to control the output of ignored paths.
Part of the perf improvement comes from the tweak to
read_directory_recursive to stop scanning the file system after it
encounters the first file. When a directory is ignored, all it needs to
determine is if the directory is empty or not. The logic currently keeps
scanning the file system until it finds an untracked file. However, as
the directory is ignored, all the contained contents are also marked
excluded. For ignored directories that contain a large number of files,
this can take some time.
Signed-off-by: Jameson Miller <jamill@xxxxxxxxxxxxx>