Skip to content

Commit

Permalink
convert.c: restructure the attribute checking part.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Apr 21, 2007
1 parent e87b1c9 commit 6073ee8
Showing 1 changed file with 28 additions and 20 deletions.
48 changes: 28 additions & 20 deletions convert.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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);
}

0 comments on commit 6073ee8

Please sign in to comment.