| 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`::: |
| |
| Return just ignored files in `entries[]`, not untracked |
| files. This flag is mutually exclusive with |
| `DIR_SHOW_IGNORED_TOO`. |
| |
| `DIR_SHOW_IGNORED_TOO`::: |
| |
| Similar to `DIR_SHOW_IGNORED`, but return ignored files in |
| `ignored[]` in addition to untracked files in |
| `entries[]`. This flag is mutually exclusive with |
| `DIR_SHOW_IGNORED`. |
| |
| `DIR_KEEP_UNTRACKED_CONTENTS`::: |
| |
| Only has meaning if `DIR_SHOW_IGNORED_TOO` is also set; if this is set, the |
| untracked contents of untracked directories are also returned in |
| `entries[]`. |
| |
| `DIR_SHOW_IGNORED_TOO_MODE_MATCHING`::: |
| |
| Only has meaning if `DIR_SHOW_IGNORED_TOO` is also set; if |
| this is set, returns ignored files and directories that match |
| an exclude pattern. If a directory matches an exclude pattern, |
| then the directory is returned and the contained paths are |
| not. A directory that does not match an exclude pattern will |
| not be returned even if all of its contents are ignored. In |
| this case, the contents are returned as individual entries. |
| + |
| If this is set, files and directories that explicitly match an ignore |
| pattern are reported. Implicitly ignored directories (directories that |
| do not match an ignore pattern, but whose contents are all ignored) |
| are not reported, instead all of the contents are reported. |
| |
| `DIR_COLLECT_IGNORED`::: |
| |
| Special mode for git-add. Return ignored files in `ignored[]` and |
| untracked files in `entries[]`. Only returns ignored files that match |
| pathspec exactly (no wildcards). Does not recurse into ignored |
| directories. |
| |
| `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. |
| |
| `ignored[]`:: |
| |
| An array of `struct dir_entry`, used for ignored paths with the |
| `DIR_SHOW_IGNORED_TOO` and `DIR_COLLECT_IGNORED` flags. |
| |
| `ignored_nr`:: |
| |
| The number of members in `ignored[]` 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) |