summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2007-04-21 06:44:02 (GMT)
committerJunio C Hamano <junkio@cox.net>2007-04-21 18:55:23 (GMT)
commit6073ee85719be6d959e74aa667024fcbec44a588 (patch)
tree479da17d027696feee6ebd3b34ac5aecd74c5da0
parente87b1c943a50af9ab51df20b3419cbffa4e75484 (diff)
downloadgit-6073ee85719be6d959e74aa667024fcbec44a588.zip
git-6073ee85719be6d959e74aa667024fcbec44a588.tar.gz
git-6073ee85719be6d959e74aa667024fcbec44a588.tar.bz2
convert.c: restructure the attribute checking part.
This separates the checkattr() call and interpretation of the returned value specific to the 'crlf' attribute into separate routines, so that we can run a single call to checkattr() to check for more than one attributes, and then interprete what the returned settings mean separately. Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--convert.c48
1 files changed, 28 insertions, 20 deletions
diff --git a/convert.c b/convert.c
index 742b895..37239ac 100644
--- a/convert.c
+++ b/convert.c
@@ -200,7 +200,7 @@ static char *crlf_to_worktree(const char *path, const char *src, unsigned long *
return buffer;
}
-static void setup_crlf_check(struct git_attr_check *check)
+static void setup_convert_check(struct git_attr_check *check)
{
static struct git_attr *attr_crlf;
@@ -209,33 +209,41 @@ static void setup_crlf_check(struct git_attr_check *check)
check->attr = attr_crlf;
}
-static int git_path_check_crlf(const char *path)
+static int git_path_check_crlf(const char *path, struct git_attr_check *check)
{
- struct git_attr_check attr_crlf_check;
-
- setup_crlf_check(&attr_crlf_check);
-
- if (!git_checkattr(path, 1, &attr_crlf_check)) {
- const char *value = attr_crlf_check.value;
- if (ATTR_TRUE(value))
- return CRLF_TEXT;
- else if (ATTR_FALSE(value))
- return CRLF_BINARY;
- else if (ATTR_UNSET(value))
- ;
- else if (!strcmp(value, "input"))
- return CRLF_INPUT;
- /* fallthru */
- }
+ const char *value = check->value;
+
+ if (ATTR_TRUE(value))
+ return CRLF_TEXT;
+ else if (ATTR_FALSE(value))
+ return CRLF_BINARY;
+ else if (ATTR_UNSET(value))
+ ;
+ else if (!strcmp(value, "input"))
+ return CRLF_INPUT;
return CRLF_GUESS;
}
char *convert_to_git(const char *path, const char *src, unsigned long *sizep)
{
- return crlf_to_git(path, src, sizep, git_path_check_crlf(path));
+ struct git_attr_check check[1];
+ int crlf = CRLF_GUESS;
+
+ setup_convert_check(check);
+ if (!git_checkattr(path, 1, check)) {
+ crlf = git_path_check_crlf(path, check);
+ }
+ return crlf_to_git(path, src, sizep, crlf);
}
char *convert_to_working_tree(const char *path, const char *src, unsigned long *sizep)
{
- return crlf_to_worktree(path, src, sizep, git_path_check_crlf(path));
+ struct git_attr_check check[1];
+ int crlf = CRLF_GUESS;
+
+ setup_convert_check(check);
+ if (!git_checkattr(path, 1, check)) {
+ crlf = git_path_check_crlf(path, check);
+ }
+ return crlf_to_worktree(path, src, sizep, crlf);
}