Re: [PATCH v2 1/1] convert.c: correct attr_action
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 23, 2016, 20:52 UTC
- Message-ID
- <xmqqpovnyws9.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <1456247239-5988-1-git-send-email-tboegi@web.de>
tboegi@web.de writes:
Show 7 quoted lines
> From: Torsten Bögershausen <tboegi@web.de> > > Commit "convert.c: refactor crlf_action" unified the crlf_handling > and introdused a bug for "git ls-files --eol". > The "text" attribute was shown as "text eol=lf" or "text eol=crlf", > depending on core.autpcrlf or core.eol. > Correct this and add test cases in t0027.
Sigh. I think I typofixed this when I queued the previous version while commenting on it.
Do people not pay attention to what is queued in 'pu' these days?
Show 6 quoted lines
> > Signed-off-by: Torsten Bögershausen <tboegi@web.de> > --- > convert.c | 18 +++++++++--------- > t/t0027-auto-crlf.sh | 33 ++++++++++++++++++++++++++------- > 2 files changed, 35 insertions(+), 16 deletions(-)
I looked at the interdiff from the previous version; the updated parts looked sensible.
Thanks, will queue.
Show 96 quoted lines
>
> diff --git a/convert.c b/convert.c
> index 18af685..d8b1f17 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))
> @@ -778,20 +778,20 @@ static void convert_attrs(struct conv_attrs *ca, const char *path)
> }
>
> 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;
> 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;
> + if (ca->crlf_action != CRLF_BINARY) {
> + enum eol 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;
> } else {
> ca->drv = NULL;
> ca->crlf_action = CRLF_UNDEFINED;
> diff --git a/t/t0027-auto-crlf.sh b/t/t0027-auto-crlf.sh
> index fc4c628..f33962b 100755
> --- a/t/t0027-auto-crlf.sh
> +++ b/t/t0027-auto-crlf.sh
> @@ -159,6 +159,25 @@ stats_ascii () {
>
> }
>
> +
> +# contruct the attr/ returned by git ls-files --eol
> +# Take none (=empty), one or two args
> +attr_ascii () {
> + case $1,$2 in
> + -text,*) echo "-text" ;;
> + text,) echo "text" ;;
> + text,lf) echo "text eol=lf" ;;
> + text,crlf) echo "text eol=crlf" ;;
> + auto,) echo "text=auto" ;;
> + auto,lf) echo "text=auto eol=lf" ;;
> + auto,crlf) echo "text=auto eol=crlf" ;;
> + lf,) echo "text eol=lf" ;;
> + crlf,) echo "text eol=crlf" ;;
> + ,) echo "" ;;
> + *) echo invalid_attr "$1,$2" ;;
> + esac
> +}
> +
> check_files_in_repo () {
> crlf=$1
> attr=$2
> @@ -228,15 +247,15 @@ checkout_files () {
> test_expect_success "ls-files --eol attr=$attr $ident $aeol core.autocrlf=$crlf core.eol=$ceol" '
> test_when_finished "rm expect actual" &&
> sort <<-EOF >expect &&
> - i/crlf w/$(stats_ascii $crlfname) crlf_false_attr__CRLF.txt
> - i/mixed w/$(stats_ascii $lfmixcrlf) crlf_false_attr__CRLF_mix_LF.txt
> - i/lf w/$(stats_ascii $lfname) crlf_false_attr__LF.txt
> - i/-text w/$(stats_ascii $lfmixcr) crlf_false_attr__LF_mix_CR.txt
> - i/-text w/$(stats_ascii $crlfnul) crlf_false_attr__CRLF_nul.txt
> - i/-text w/$(stats_ascii $crlfnul) crlf_false_attr__LF_nul.txt
> + i/crlf w/$(stats_ascii $crlfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF.txt
> + i/mixed w/$(stats_ascii $lfmixcrlf) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_mix_LF.txt
> + i/lf w/$(stats_ascii $lfname) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF.txt
> + i/-text w/$(stats_ascii $lfmixcr) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_mix_CR.txt
> + i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
> + i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
> EOF
> git ls-files --eol crlf_false_attr__* |
> - sed -e "s!attr/[^ ]*!!g" -e "s/ / /g" -e "s/ */ /g" |
> + sed -e "s/ / /g" -e "s/ */ /g" |
> sort >actual &&
> test_cmp expect actual
> '