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.  The notable
options are:

`exclude_per_dir`::

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

`collect_ignored`::

	Include paths that are to be excluded in the result.

`show_ignored`::

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

`show_other_directories`::

	Include a directory that is not tracked.

`hide_empty_directories`::

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

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

* 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)
