convert.c: ident + core.autocrlf didn't work
When the ident attributes is set, get_stream_filter() did not obey core.autocrlf=true, and the file was checked out with LF. Change the rule when a streaming filter can be used: - if an external filter is specified, don't use a stream filter. - if the worktree eol is CRLF and "auto" is active, don't use a stream filter. - Otherwise the stream filter can be used. Add test cases in t0027. Signed-off-by: Torsten Bögershausen <tboegi@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
67e9bff06a
commit
caa47adc5a
19
convert.c
19
convert.c
@ -1380,27 +1380,22 @@ static struct stream_filter *ident_filter(const unsigned char *sha1)
|
|||||||
struct stream_filter *get_stream_filter(const char *path, const unsigned char *sha1)
|
struct stream_filter *get_stream_filter(const char *path, const unsigned char *sha1)
|
||||||
{
|
{
|
||||||
struct conv_attrs ca;
|
struct conv_attrs ca;
|
||||||
enum crlf_action crlf_action;
|
|
||||||
struct stream_filter *filter = NULL;
|
struct stream_filter *filter = NULL;
|
||||||
|
|
||||||
convert_attrs(&ca, path);
|
convert_attrs(&ca, path);
|
||||||
|
|
||||||
if (ca.drv && (ca.drv->smudge || ca.drv->clean))
|
if (ca.drv && (ca.drv->smudge || ca.drv->clean))
|
||||||
return filter;
|
return NULL;
|
||||||
|
|
||||||
|
if (ca.crlf_action == CRLF_AUTO || ca.crlf_action == CRLF_AUTO_CRLF)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if (ca.ident)
|
if (ca.ident)
|
||||||
filter = ident_filter(sha1);
|
filter = ident_filter(sha1);
|
||||||
|
|
||||||
crlf_action = ca.crlf_action;
|
if (output_eol(ca.crlf_action) == EOL_CRLF)
|
||||||
|
|
||||||
if ((crlf_action == CRLF_BINARY) ||
|
|
||||||
crlf_action == CRLF_AUTO_INPUT ||
|
|
||||||
(crlf_action == CRLF_TEXT_INPUT))
|
|
||||||
filter = cascade_filter(filter, &null_filter_singleton);
|
|
||||||
|
|
||||||
else if (output_eol(crlf_action) == EOL_CRLF &&
|
|
||||||
!(crlf_action == CRLF_AUTO || crlf_action == CRLF_AUTO_CRLF))
|
|
||||||
filter = cascade_filter(filter, lf_to_crlf_filter());
|
filter = cascade_filter(filter, lf_to_crlf_filter());
|
||||||
|
else
|
||||||
|
filter = cascade_filter(filter, &null_filter_singleton);
|
||||||
|
|
||||||
return filter;
|
return filter;
|
||||||
}
|
}
|
||||||
|
@ -493,7 +493,7 @@ fi
|
|||||||
export CRLF_MIX_LF_CR MIX NL
|
export CRLF_MIX_LF_CR MIX NL
|
||||||
|
|
||||||
# Same handling with and without ident
|
# Same handling with and without ident
|
||||||
for id in ""
|
for id in "" ident
|
||||||
do
|
do
|
||||||
for ceol in lf crlf native
|
for ceol in lf crlf native
|
||||||
do
|
do
|
||||||
|
Loading…
Reference in New Issue
Block a user