git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: What's cooking extra

From
Eyvind Bernhardsen <eyvind.bernhardsen@gmail.com>
Date
May 22, 2010, 19:42 UTC
Message-ID
<50199F1F-3513-43A6-8990-957F3D0AF58C@gmail.com>
In-Reply-To
<20100522130916.GA28452@localhost>
On 22. mai 2010, at 15.09, Clemens Buchacher wrote:
Show 21 quoted lines
> On Wed, May 19, 2010 at 07:06:56PM +0200, Finn Arne Gangstad wrote:
>> On Wed, May 19, 2010 at 07:33:32AM -0700, Junio C Hamano wrote:
>> 
>>> * (Eyvind Bernhardsen and Linus) Fixing the behaviour of crlf attribute;
>>>   ignoring them when core.autocrlf is not in effect was a wrong design
>>>   decision.
>>> 
>>>   I agree with what Linus said in the thread; I haven't yet looked at the
>>>   discussion in the past few days.  Also I don't know where '[PATCH v2]
>>>   Add "core.eol" config variable' fits in the picture.
>> 
>> I think this one is pretty much discussed by now, with the latest
>> changes this should do pretty much what Linus wanted.
> 
> That is not the impression I got. Linus was objecting to the idea of new
> attribute and configuration variables, which essentially do the same thing
> but with slightly different semantics.
> 
> As soon as the existing crlf attribute is given priority over core.autocrlf,
> all the problems discussed originally go away. So what exactly are the new
> attributes supposed to do?
There is one new attribute, "eol", that is used for files which need a specific line ending.  Being able to "force" LF or CRLF line endings has been requested several times on the list, and is already sort of provided for by "crlf=input".
Linus had lots of strong objections, but I also made lots of changes during the course of the discussion.
> Also, could you post a truth table for all the parameters involved (eol,
> crlf, core.autocrlf, core.eol). The documentation in the patches is too
> confusing for me to understand even that.
I'll do my best.  Basically there are two things to keep track of: "should this file be normalized as text?" and "which line endings should this file have in the working directory?".  There is an attribute for each, and two configuration variables that set the default values of the attributes.
Unfortunately my mail client mangles ascii art, so I can't do a table.  This will have to suffice:
Any file with the "text" attribute set will have its line endings normalized to LF in the repository.  If "text" is set to the special value "auto", git will only convert the file if it looks like a text file.
The "eol" attribute is used for files that need a specific line ending.  Setting it also sets "text".
core.eol controls which line endings to use for normalized files that don't have the "eol" attribute set, and defaults to the platform native line ending.
When core.autocrlf is set, the default value of the "text" attribute is set to "auto" but with an extra safety feature: if a file contains CRs in the index, it won't be normalized.  The extra feature comes from Finn Arne's "safe autocrlf" patch.
There is a backwards compatibility wrinkle in that core.autocrlf will override core.eol if the latter isn't explicitly set, so that "core.autocrlf=true" still results in CRLFs in the working directory on Linux.
> And, renaming the crlf attribute to text? Where did Linus suggest that? If
> we do that, we don't even have to talk about backwards compatibility any
> more.
In <alpine.LFD.2.00.1005121824260.3711@i5.linux-foundation.org>:
> So if you rename these things, keep them separate.  Make the "am I a
> text-file" boolean be a boolean (plus "auto"), and just call it "text". 
> And make the "what end of line to use" be just "eol" then.
So he didn't suggest renaming it, but he did suggest a better name and UI than the one I came up with.  I expected objections to renaming the attribute, which is why that is a separate commit, but people seemed supportive overall.
The "crlf" attribute will be used if it is present so backwards compatibility is preserved to a degree.  Scripts that test for the "crlf" attribute explicitly (such as git-cvsserver, which I fixed) will break.  I don't know how big a problem that is going to be in practice, but nobody raised it as an issue during the discussion.
Compatibility with older clients is a valid concern, but older clients will ignore "crlf" as well as "text" unless core.autocrlf is set, so they will cause problems no matter what.
-- 
Eyvind
Previous: Clemens BuchacherNext: Clemens Buchacher
Message 6 of 35 in “What's cooking extra”
  1. Junio C HamanoMay 19, 2010
  2. A Large Angry SCMMay 19, 2010
  3. Finn Arne GangstadMay 19, 2010
  4. Eyvind BernhardsenMay 19, 2010
  5. Clemens BuchacherMay 22, 2010
  6. Eyvind BernhardsenMay 22, 2010
  7. Clemens BuchacherMay 22, 2010
  8. Eyvind BernhardsenMay 23, 2010
  9. Clemens BuchacherMay 23, 2010
  10. Eyvind BernhardsenMay 23, 2010
  11. Ævar Arnfjörð BjarmasonMay 23, 2010
  12. Clemens BuchacherMay 24, 2010
  13. Dmitry PotapovMay 24, 2010
  14. Eyvind BernhardsenMay 24, 2010
  15. Clemens BuchacherMay 24, 2010
  16. Eyvind BernhardsenMay 24, 2010
  17. Eyvind BernhardsenMay 24, 2010
  18. Clemens BuchacherMay 24, 2010
  19. Eyvind BernhardsenMay 25, 2010
  20. Anthony YoungmanMay 25, 2010
  21. Eyvind BernhardsenJun 7, 2010
  22. Clemens BuchacherMay 25, 2010
  23. Dmitry PotapovMay 24, 2010
  24. Erik Faye-LundMay 24, 2010
  25. Dmitry PotapovMay 24, 2010
  26. Ævar Arnfjörð BjarmasonMay 21, 2010
  27. René ScharfeMay 22, 2010
  28. 1/8 grep: add test script for binary file handlingRené Scharfe, May 22, 2010
  29. 2/8 grep: grep: refactor handling of binary mode optionsRené Scharfe, May 22, 2010
  30. 3/8 grep: --count over binaryRené Scharfe, May 22, 2010
  31. 4/8 grep: --name-only over binaryRené Scharfe, May 22, 2010
  32. 5/8 grep: use memmem() for fixed string searchRené Scharfe, May 22, 2010
  33. 6/8 grep: continue case insensitive fixed string search after NUL charsRené Scharfe, May 22, 2010
  34. 7/8 grep: use REG_STARTEND for all matching if availableRené Scharfe, May 22, 2010
  35. 8/8 grep: support NUL chars in search strings for -FRené Scharfe, May 22, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.