ldrumm wrote:

>> It's my understanding that text=auto does not override core.autocrlf. As far 
>> as I can tell from the documentation it honours the user's configuration for 
>> core.eol in combination with core.autocrlf - from git config --help:

> This doesn't match my experience.

I think this is due to a subtly of config. Setting `core.autocrlf` to `false` 
doesn't actually do anything since it's the default. In that case git is still 
in "no opinion" mode - which means it stores the input line endings and does no 
conversion.

However, once `eol=auto` is set in a `.gitattributes`, it forces git to use the 
configured eol config:

```c
static int text_eol_is_crlf(void)
{
        if (auto_crlf == AUTO_CRLF_TRUE)
                return 1;
        else if (auto_crlf == AUTO_CRLF_INPUT)
                return 0;
        if (core_eol == EOL_CRLF)
                return 1;
        if (core_eol == EOL_UNSET && EOL_NATIVE == EOL_CRLF)
                return 1;
        return 0;
}

static enum eol output_eol(enum convert_crlf_action crlf_action)
{
        switch (crlf_action) {
        case CRLF_BINARY:
                return EOL_UNSET;
        case CRLF_TEXT_CRLF:
                return EOL_CRLF;
        case CRLF_TEXT_INPUT:
                return EOL_LF;
        case CRLF_UNDEFINED:
        case CRLF_AUTO_CRLF:
                return EOL_CRLF;
        case CRLF_AUTO_INPUT:
                return EOL_LF;
        case CRLF_TEXT:
        case CRLF_AUTO:
                /* fall through */
                return text_eol_is_crlf() ? EOL_CRLF : EOL_LF;
        }
        warning(_("illegal crlf_action %d"), (int)crlf_action);
        return core_eol;
}
```
`output_eol` is the git function that decides to write out a file with CRLF or 
LF endings

Notice that now we hit the `CRLF_AUTO`  case so it's `text_eol_is_crlf() ? 
EOL_CRLF : EOL_LF;`
 
`text_eol_is_crlf()` checks against `core.autocrlf`. Since you've stated that 
it's `false`, then it then it checks `core.eol`.

So if I've read that correctly, `core.autocrlf=false` is a red herring and you 
should really set `core.eol=lf` if you want git to use `lf` on windows.

> Would we get there by setting the wildcard rule in .gitattrubtes to * text 
> eof=lf, or something along those lines?

This patch is about respecting local config, which is the exact opposite of 
that suggestion. It would be a way to solve the line-ending issue by fiat, not 
by co-operation, so I'm against it on principle. To be clear I very much don't 
like CRLF, but I also very much don't like it when someone forces me to use 
wrong-handed tools. Windows users would be forced to use wrong handed tools if 
we force line-endings one way or another

https://github.com/llvm/llvm-project/pull/86318
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to