summaryrefslogtreecommitdiff
path: root/src/filter.h
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2013-08-28 16:44:04 -0700
committerRussell Belfer <rb@github.com>2013-09-17 09:30:06 -0700
commit85d5481206a932d747b2d5587b6d4c7f69993ba6 (patch)
treea66d55c92d70668509efce5b231517467a3f8b7e /src/filter.h
parent0cf77103b218ad3622aff34f3296db1bdd5f0df9 (diff)
downloadlibgit2-85d5481206a932d747b2d5587b6d4c7f69993ba6.tar.gz
Create public filter object and use it
This creates include/sys/filter.h with a basic definition of a git_filter and then converts the internal code to use it. There are related internal objects (git_filter_list) that we will want to publish at some point, but this is a first step.
Diffstat (limited to 'src/filter.h')
-rw-r--r--src/filter.h61
1 files changed, 29 insertions, 32 deletions
diff --git a/src/filter.h b/src/filter.h
index 67845ad6a..a4ee2172d 100644
--- a/src/filter.h
+++ b/src/filter.h
@@ -9,14 +9,11 @@
#include "common.h"
#include "buffer.h"
+#include "array.h"
#include "git2/odb.h"
#include "git2/repository.h"
#include "git2/filter.h"
-
-struct git_filter {
- int (*apply)(struct git_filter *self, git_buf *dest, const git_buf *source);
- void (*do_free)(struct git_filter *self);
-};
+#include "git2/sys/filter.h"
typedef enum {
GIT_CRLF_GUESS = -1,
@@ -27,34 +24,38 @@ typedef enum {
GIT_CRLF_AUTO,
} git_crlf_t;
+typedef struct git_filter_list git_filter_list;
+
/*
* FILTER API
*/
/*
- * For any given path in the working directory, fill the `filters`
- * array with the relevant filters that need to be applied.
+ * For any given path in the working directory, create a `git_filter_list`
+ * with the relevant filters that need to be applied.
*
- * Mode is either `GIT_FILTER_TO_WORKTREE` if you need to load the
- * filters that will be used when checking out a file to the working
- * directory, or `GIT_FILTER_TO_ODB` for the filters used when writing
- * a file to the ODB.
+ * This will return 0 (success) but set the output git_filter_list to NULL
+ * if no filters are requested for the given file.
*
- * @param filters Vector where to store all the loaded filters
+ * @param filters Output newly created git_filter_list (or NULL)
* @param repo Repository object that contains `path`
* @param path Relative path of the file to be filtered
* @param mode Filtering direction (WT->ODB or ODB->WT)
- * @return the number of filters loaded for the file (0 if the file
- * doesn't need filtering), or a negative error code
+ * @return 0 on success (which could still return NULL if no filters are
+ * needed for the requested file), <0 on error
*/
-extern int git_filters_load(git_vector *filters, git_repository *repo, const char *path, int mode);
+extern int git_filter_list_load(
+ git_filter_list **filters,
+ git_repository *repo,
+ const char *path,
+ git_filter_mode_t mode);
/*
- * Apply one or more filters to a file.
+ * Apply one or more filters to a data buffer.
*
- * The file must have been loaded as a `git_buf` object. Both the `source`
- * and `dest` buffers are owned by the caller and must be freed once
- * they are no longer needed.
+ * The source data must have been loaded as a `git_buf` object. Both the
+ * `source` and `dest` buffers are owned by the caller and must be freed
+ * once they are no longer needed.
*
* NOTE: Because of the double-buffering schema, the `source` buffer that
* contains the original file may be tampered once the filtering is
@@ -63,29 +64,25 @@ extern int git_filters_load(git_vector *filters, git_repository *repo, const cha
*
* @param dest Buffer to store the result of the filtering
* @param source Buffer containing the document to filter
- * @param filters Vector of filters as supplied by `git_filters_load`
+ * @param filters An already loaded git_filter_list
* @return 0 on success, an error code otherwise
*/
-extern int git_filters_apply(git_buf *dest, git_buf *source, git_vector *filters);
+extern int git_filter_list_apply(
+ git_buf *dest,
+ git_buf *source,
+ git_filter_list *filters);
/*
- * Free the `filters` array generated by `git_filters_load`.
+ * Free the git_filter_list
*
- * Note that this frees both the array and its contents. The array will
- * be clean/reusable after this call.
- *
- * @param filters A filters array as supplied by `git_filters_load`
+ * @param filters A git_filter_list created by `git_filter_list_load`
*/
-extern void git_filters_free(git_vector *filters);
+extern void git_filter_list_free(git_filter_list *filters);
/*
* Available filters
*/
-/* Strip CRLF, from Worktree to ODB */
-extern int git_filter_add__crlf_to_odb(git_vector *filters, git_repository *repo, const char *path);
-
-/* Add CRLF, from ODB to worktree */
-extern int git_filter_add__crlf_to_workdir(git_vector *filters, git_repository *repo, const char *path);
+extern git_filter *git_crlf_filter_new(void);
#endif