Commit 3e96ecf219bd9b84c3a7faec61e818766f60e0d9

Russell Belfer 2013-07-08T09:53:24

Improve include/git2/pathspec.h docs

diff --git a/include/git2/pathspec.h b/include/git2/pathspec.h
index 8122d99..6d97bb3 100644
--- a/include/git2/pathspec.h
+++ b/include/git2/pathspec.h
@@ -25,20 +25,22 @@ typedef struct git_pathspec_match_list git_pathspec_match_list;
  * Options controlling how pathspec match should be executed
  *
  * - GIT_PATHSPEC_IGNORE_CASE forces match to ignore case; otherwise
- *   match will use native case sensitivity of platform
+ *   match will use native case sensitivity of platform filesystem
  * - GIT_PATHSPEC_USE_CASE forces case sensitive match; otherwise
- *   match will use native case sensitivity of platform
+ *   match will use native case sensitivity of platform filesystem
  * - GIT_PATHSPEC_NO_GLOB disables glob patterns and just uses simple
  *   string comparison for matching
- * - GIT_PATHSPEC_NO_MATCH_ERROR means the match function will return
- *   GIT_ENOTFOUND if no matches are found; otherwise it will return 0
- *   for success and `git_pathspec_match_list_entrycount` will be 0.
- * - GIT_PATHSPEC_FIND_FAILURES only applies to a git_pathspec_match_list;
- *   it means to check file names against all unmatched patterns so that
- *   at the end of a match we can identify patterns that did not match any
- *   files.
- * - GIT_PATHSPEC_FAILURES_ONLY only applies to a git_pathspec_match_list;
- *   it means to only check for mismatches and not record matched paths.
+ * - GIT_PATHSPEC_NO_MATCH_ERROR means the match functions return error
+ *   code GIT_ENOTFOUND if no matches are found; otherwise no matches is
+ *   still success (return 0) but `git_pathspec_match_list_entrycount`
+ *   will indicate 0 matches.
+ * - GIT_PATHSPEC_FIND_FAILURES means that the `git_pathspec_match_list`
+ *   should track which patterns matched which files so that at the end of
+ *   the match we can identify patterns that did not match any files.
+ * - GIT_PATHSPEC_FAILURES_ONLY means that the `git_pathspec_match_list`
+ *   does not need to keep the actual matching filenames.  Use this to
+ *   just test if there were any matches at all or in combination with
+ *   GIT_PATHSPEC_FIND_FAILURES to validate a pathspec.
  */
 typedef enum {
 	GIT_PATHSPEC_DEFAULT        = 0,
@@ -54,7 +56,6 @@ typedef enum {
  * Compile a pathspec
  *
  * @param out Output of the compiled pathspec
- * @param flags Combination of git_pathspec_flag_t values
  * @param pathspec A git_strarray of the paths to match
  * @return 0 on success, <0 on failure
  */
@@ -77,7 +78,7 @@ GIT_EXTERN(void) git_pathspec_free(git_pathspec *ps);
  * fall back on being case sensitive.
  *
  * @param ps The compiled pathspec
- * @param flags Match flags to influence matching behavior
+ * @param flags Combination of git_pathspec_flag_t options to control match
  * @param path The pathname to attempt to match
  * @return 1 is path matches spec, 0 if it does not
  */
@@ -87,18 +88,24 @@ GIT_EXTERN(int) git_pathspec_matches_path(
 /**
  * Match a pathspec against the working directory of a repository.
  *
- * This returns a `git_patchspec_match` object that contains the list of
- * all files matching the given pathspec in the working directory of the
- * repository.  This handles git ignores (i.e. ignored files will not be
+ * This matches the pathspec against the current files in the working
+ * directory of the repository.  It is an error to invoke this on a bare
+ * repo.  This handles git ignores (i.e. ignored files will not be
  * considered to match the `pathspec` unless the file is tracked in the
  * index).
  *
- * @param out Object with list of matching items
+ * If `out` is not NULL, this returns a `git_patchspec_match_list`.  That
+ * contains the list of all matched filenames (unless you pass the
+ * `GIT_PATHSPEC_FAILURES_ONLY` flag) and may also contain the list of
+ * pathspecs with no match (if you used the `GIT_PATHSPEC_FIND_FAILURES`
+ * flag).  You must call `git_pathspec_match_list_free()` on this object.
+ *
+ * @param out Output list of matches; pass NULL to just get return value
  * @param repo The repository in which to match; bare repo is an error
- * @param flags Options to control matching behavior
+ * @param flags Combination of git_pathspec_flag_t options to control match
  * @param ps Pathspec to be matched
  * @return 0 on success, -1 on error, GIT_ENOTFOUND if no matches and
- *         the GIT_PATHSPEC_NO_MATCH_ERROR flag is used
+ *         the GIT_PATHSPEC_NO_MATCH_ERROR flag was given
  */
 GIT_EXTERN(int) git_pathspec_match_workdir(
 	git_pathspec_match_list **out,
@@ -109,17 +116,22 @@ GIT_EXTERN(int) git_pathspec_match_workdir(
 /**
  * Match a pathspec against entries in an index.
  *
- * This returns a `git_patchspec_match` object that contains the list of
- * all files matching the given pathspec in the index.
+ * This matches the pathspec against the files in the repository index.
  *
  * NOTE: At the moment, the case sensitivity of this match is controlled
  * by the current case-sensitivity of the index object itself and the
  * USE_CASE and IGNORE_CASE flags will have no effect.  This behavior will
  * be corrected in a future release.
  *
- * @param out Object with list of matching items
- * @param inex The index in which to match
- * @param flags Options to control matching behavior
+ * If `out` is not NULL, this returns a `git_patchspec_match_list`.  That
+ * contains the list of all matched filenames (unless you pass the
+ * `GIT_PATHSPEC_FAILURES_ONLY` flag) and may also contain the list of
+ * pathspecs with no match (if you used the `GIT_PATHSPEC_FIND_FAILURES`
+ * flag).  You must call `git_pathspec_match_list_free()` on this object.
+ *
+ * @param out Output list of matches; pass NULL to just get return value
+ * @param index The index to match against
+ * @param flags Combination of git_pathspec_flag_t options to control match
  * @param ps Pathspec to be matched
  * @return 0 on success, -1 on error, GIT_ENOTFOUND if no matches and
  *         the GIT_PATHSPEC_NO_MATCH_ERROR flag is used
@@ -133,12 +145,17 @@ GIT_EXTERN(int) git_pathspec_match_index(
 /**
  * Match a pathspec against files in a tree.
  *
- * This returns a `git_patchspec_match` object that contains the list of
- * all files matching the given pathspec in the given tree.
+ * This matches the pathspec against the files in the given tree.
+ *
+ * If `out` is not NULL, this returns a `git_patchspec_match_list`.  That
+ * contains the list of all matched filenames (unless you pass the
+ * `GIT_PATHSPEC_FAILURES_ONLY` flag) and may also contain the list of
+ * pathspecs with no match (if you used the `GIT_PATHSPEC_FIND_FAILURES`
+ * flag).  You must call `git_pathspec_match_list_free()` on this object.
  *
- * @param out Object with list of matching items
- * @param inex The index in which to match
- * @param flags Options to control matching behavior
+ * @param out Output list of matches; pass NULL to just get return value
+ * @param tree The root-level tree to match against
+ * @param flags Combination of git_pathspec_flag_t options to control match
  * @param ps Pathspec to be matched
  * @return 0 on success, -1 on error, GIT_ENOTFOUND if no matches and
  *         the GIT_PATHSPEC_NO_MATCH_ERROR flag is used