The directory listing API is used to enumerate paths in the work tree, optionally taking .git/info/exclude and .gitignore files per directory into account.
struct dir_struct structure is used to pass directory traversal options to the library and to record the paths discovered. The notable options are:
The name of the file to be read in each directory for excluded files (typically .gitignore).
Include paths that are to be excluded in the result.
The traversal is for finding just ignored files, not unignored files.
Include a directory that is not tracked.
Do not include a directory that is not tracked and is empty.
If set, recurse into a directory that looks like a git directory. Otherwise it is shown as a directory.
An array of struct dir_entry, each element of which describes a path.
The number of members in entries[] array.
Internal use; keeps track of allocation of entries[] array.
Note: index may be looked at for .gitignore files that are CE_SKIP_WORKTREE marked. If you to exclude files, make sure you have loaded index first.
Prepare struct dir_struct dir and clear it with memset(&dir, 0, sizeof(dir)).
Call add_exclude() to add single exclude pattern, add_excludes_from_file() to add patterns from a file (e.g. .git/info/exclude), and/or set dir.exclude_per_dir. A short-hand function setup_standard_excludes() can be used to set up the standard set of exclude settings.
Set options described in the Data Structure section above.
Call read_directory().
Use dir.entries[].
(JC)