directory listing API
=====================

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.

Data structure
--------------

`struct dir_struct` structure is used to pass directory traversal
options to the library and to record the paths discovered.  A single
`struct dir_struct` is used regardless of whether or not the traversal
recursively descends into subdirectories.

The notable options are:

`exclude_per_dir`::

	The name of the file to be read in each directory for excluded
	files (typically `.gitignore`).

`flags`::

	A bit-field of options:

`DIR_SHOW_IGNORED`:::

	The traversal is for finding just ignored files, not unignored
	files.

`DIR_SHOW_OTHER_DIRECTORIES`:::

	Include a directory that is not tracked.

`DIR_HIDE_EMPTY_DIRECTORIES`:::

	Do not include a directory that is not tracked and is empty.

`DIR_NO_GITLINKS`:::

	If set, recurse into a directory that looks like a Git
	directory.  Otherwise it is shown as a directory.

The result of the enumeration is left in these fields:

`entries[]`::

	An array of `struct dir_entry`, each element of which describes
	a path.

`nr`::

	The number of members in `entries[]` array.

`alloc`::

	Internal use; keeps track of allocation of `entries[]` array.


Calling sequence
----------------

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))`.

* To add single exclude pattern, call `add_exclude_list()` and then
  `add_exclude()`.

* To add patterns from a file (e.g. `.git/info/exclude`), call
  `add_excludes_from_file()` , 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[]`.

* Call `clear_directory()` when none of the contained elements are no longer in use.

(JC)
