[email protected] writes:
> diff --git a/convert.c b/convert.c
> index 18af685..0bc32ec 100644
> --- a/convert.c
> +++ b/convert.c
> @@ -708,7 +708,7 @@ static enum crlf_action git_path_check_crlf(struct
> git_attr_check *check)
> const char *value = check->value;
>
> if (ATTR_TRUE(value))
> - return text_eol_is_crlf() ? CRLF_TEXT_CRLF : CRLF_TEXT_INPUT;
> + return CRLF_TEXT;
> else if (ATTR_FALSE(value))
> return CRLF_BINARY;
> else if (ATTR_UNSET(value))
Hmph, this function has exactly two callers, and they call it like
this:
if (!git_check_attr(path, NUM_CONV_ATTRS, ccheck)) {
enum eol eol_attr;
ca->crlf_action = git_path_check_crlf(ccheck + 4);
if (ca->crlf_action == CRLF_UNDEFINED)
ca->crlf_action = git_path_check_crlf(ccheck + 0);
ca->attr_action = ca->crlf_action;
where ccheck+0 refers to "crlf" and ccheck+4 refers to "text".
So, we say "first check 'text' attribute, and if it is true we say
CRLF_TEXT and stop." We also say "first check 'text', and if it is
not there, the first call returns undef, in which case we check 'crlf'
attribute, and if it is true we say CRLF_TEXT".
And ca->attr_action retains this value.
However, immediately after this assignment to ca->attr_action, we
have this:
ca->ident = git_path_check_ident(ccheck + 1);
ca->drv = git_path_check_convert(ccheck + 2);
if (ca->crlf_action == CRLF_BINARY)
return;
eol_attr = git_path_check_eol(ccheck + 3);
if (eol_attr == EOL_LF)
ca->crlf_action = CRLF_TEXT_INPUT;
else if (eol_attr == EOL_CRLF)
ca->crlf_action = CRLF_TEXT_CRLF;
ca->attr_action = ca->crlf_action;
We check ident (ccheck+1) and filter (ccheck+2); if the value of
ca->crlf_action (which was determined by checking 'text' and then
'crlf') is not CRLF_BINARY, we further check eol (ccheck+3) and
update ca->crlf_action based on it. And ca->attr_action gets
updated again.
This feels unnecessarily convoluted. Perhaps if you get rid of the
early return for CRLF_BINARY, the flow may become a lot clearer,
i.e.
ca->crlf_action = check 'text';
if (ca->crlf_action == undef)
ca->crlf_action = check 'crlf';
// DO NOT ASSIGN ca->attr_action HERE YET
ca->ident = check 'ident';
ca->drv = check 'filter';
if (crlf_action != CRLF_BINARY) {
eol_attr = check 'eol';
if (eol == LF)
ca->crlf_action = ...
else if (eol == EOL_CRLF)
ca->crlf_action = ...
}
ca->attr_action = ca->crlf_action;
Hmm?
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html