Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Straub <bstraub@github.com>2012-07-16 23:06:23 +0400
committerBen Straub <bstraub@github.com>2012-07-16 23:06:23 +0400
commit9587895f572ad4808fb1746dd6510f92ec30c3a6 (patch)
tree7de0a8d95aafa99901ad8221d7f7af5348897c13 /src/filter.c
parent41ad70d0a8d5bf294197be5da26411bc7aa33fcc (diff)
Migrate code to git_filter_blob_contents.
Also removes the unnecessary check for filter length, since git_filters_apply does the right thing when there are none, and it's more efficient than this.
Diffstat (limited to 'src/filter.c')
-rw-r--r--src/filter.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/filter.c b/src/filter.c
index aa95e0267..ecdc809a4 100644
--- a/src/filter.c
+++ b/src/filter.c
@@ -11,6 +11,7 @@
#include "filter.h"
#include "repository.h"
#include "git2/config.h"
+#include "blob.h"
/* Tweaked from Core Git. I wonder what we could use this for... */
void git_text_gather_stats(git_text_stats *stats, const git_buf *text)
@@ -163,3 +164,35 @@ int git_filters_apply(git_buf *dest, git_buf *source, git_vector *filters)
return 0;
}
+
+static int unfiltered_blob_contents(git_buf *out, git_repository *repo, const git_oid *blob_id)
+{
+ int retcode = GIT_ERROR;
+ git_blob *blob;
+
+ if (!(retcode = git_blob_lookup(&blob, repo, blob_id)))
+ retcode = git_blob__getbuf(out, blob);
+
+ return retcode;
+}
+
+int git_filter_blob_contents(git_buf *out, git_repository *repo, const git_oid *oid, const char *path)
+{
+ int retcode = GIT_ERROR;
+
+ git_buf unfiltered = GIT_BUF_INIT;
+ if (!unfiltered_blob_contents(&unfiltered, repo, oid)) {
+ git_vector filters = GIT_VECTOR_INIT;
+ if (git_filters_load(&filters,
+ repo, path, GIT_FILTER_TO_WORKTREE) >= 0) {
+ git_buf_clear(out);
+ retcode = git_filters_apply(out, &unfiltered, &filters);
+ }
+
+ git_filters_free(&filters);
+ }
+
+ git_buf_free(&unfiltered);
+ return retcode;
+}
+