summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Straub <bstraub@github.com>2012-07-09 20:21:22 -0700
committerBen Straub <bstraub@github.com>2012-07-09 20:21:22 -0700
commitf2d42eea34b0b080877d3bfd5cd3dd3242459d32 (patch)
tree30e22b64d2fdb9cf74e0e5bf1537a59871ba31bb
parent4a26ee4fd4f389322017aa600b337544f46dfc8d (diff)
downloadlibgit2-f2d42eea34b0b080877d3bfd5cd3dd3242459d32.tar.gz
Checkout: add structure for CRLF.
-rw-r--r--src/crlf.c20
-rw-r--r--src/filter.c6
-rw-r--r--src/filter.h3
3 files changed, 24 insertions, 5 deletions
diff --git a/src/crlf.c b/src/crlf.c
index 303a46d3b..888d86c36 100644
--- a/src/crlf.c
+++ b/src/crlf.c
@@ -184,7 +184,8 @@ static int crlf_apply_to_odb(git_filter *self, git_buf *dest, const git_buf *sou
return drop_crlf(dest, source);
}
-int git_filter_add__crlf_to_odb(git_vector *filters, git_repository *repo, const char *path)
+static int find_and_add_filter(git_vector *filters, git_repository *repo, const char *path,
+ int (*apply)(struct git_filter *self, git_buf *dest, const git_buf *source))
{
struct crlf_attrs ca;
struct crlf_filter *filter;
@@ -219,10 +220,25 @@ int git_filter_add__crlf_to_odb(git_vector *filters, git_repository *repo, const
filter = git__malloc(sizeof(struct crlf_filter));
GITERR_CHECK_ALLOC(filter);
- filter->f.apply = &crlf_apply_to_odb;
+ filter->f.apply = apply;
filter->f.do_free = NULL;
memcpy(&filter->attrs, &ca, sizeof(struct crlf_attrs));
return git_vector_insert(filters, filter);
}
+static int crlf_apply_to_workdir(git_filter *self, git_buf *dest, const git_buf *source)
+{
+ /* TODO */
+ return 0;
+}
+
+int git_filter_add__crlf_to_odb(git_vector *filters, git_repository *repo, const char *path)
+{
+ return find_and_add_filter(filters, repo, path, &crlf_apply_to_odb);
+}
+
+int git_filter_add__crlf_to_workdir(git_vector *filters, git_repository *repo, const char *path)
+{
+ return find_and_add_filter(filters, repo, path, &crlf_apply_to_workdir);
+}
diff --git a/src/filter.c b/src/filter.c
index 8fa3eb684..aa95e0267 100644
--- a/src/filter.c
+++ b/src/filter.c
@@ -95,8 +95,9 @@ int git_filters_load(git_vector *filters, git_repository *repo, const char *path
if (error < 0)
return error;
} else {
- giterr_set(GITERR_INVALID, "Worktree filters are not implemented yet");
- return -1;
+ error = git_filter_add__crlf_to_workdir(filters, repo, path);
+ if (error < 0)
+ return error;
}
return (int)filters->length;
@@ -162,4 +163,3 @@ int git_filters_apply(git_buf *dest, git_buf *source, git_vector *filters)
return 0;
}
-
diff --git a/src/filter.h b/src/filter.h
index 66e370aef..b9beb4942 100644
--- a/src/filter.h
+++ b/src/filter.h
@@ -96,6 +96,9 @@ extern void git_filters_free(git_vector *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);
+
/*
* PLAINTEXT API