EOL conversion on checkout for text files only

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

EOL conversion on checkout for text files only

Borek Bernard
Hi,

I'd like to propose a new behavior around EOL normalization / forcing
using gitattributes.

My use case is this: I want to ensure that LF line endings are used in
the repo *and* in all working directories, on all platforms (in our
case, the text files MUST be LF even on Windows).

The first part is easy to achieve using this in a .gitattributes file:

    * text=auto

This will correctly normalize *text files* in the repo. However, the
second part (LF forcing on checkout) cannot be achieved easily today
because adding `eol=lf` will unfortunately process binary files too.
The only solution today is to mark certain types for conversion (e.g.,
`*.txt eol=lf`) or, inversely, mark certain types as binary (e.g.,
`*.png binary`).

Both of these suffer from the same issue: the specific file types must
be listed explicitly in the .gitattributes file, which means that
either the types must be known ahead of time or all developers must
remember to update the .gitattributes file every time a new file type
appears in the project. Which they won't.

The simplest solution in my eyes would be just to change the behavior of

    * text=auto eol=lf

to do both the checkin and checkout EOL conversions on *text files
only*, using the same text/binary detection algorithm that is already
in place for the checkin direction. This feels the most intuitive to
me and I think it would not be a breaking change.

Related IRC discussion:
http://colabti.org/irclogger/irclogger_log/git?date=2015-04-04#l1143

Thoughts?

Thanks,
Borek
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [hidden email]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: EOL conversion on checkout for text files only

Torsten Bögershausen-2
On 2015-04-06 20.05, Borek Bernard wrote:

> Hi,
>
> I'd like to propose a new behavior around EOL normalization / forcing
> using gitattributes.
>
> My use case is this: I want to ensure that LF line endings are used in
> the repo *and* in all working directories, on all platforms (in our
> case, the text files MUST be LF even on Windows).
>
> The first part is easy to achieve using this in a .gitattributes file:
>
>     * text=auto
>
> This will correctly normalize *text files* in the repo. However, the
> second part (LF forcing on checkout) cannot be achieved easily today
> because adding `eol=lf` will unfortunately process binary files too.
> The only solution today is to mark certain types for conversion (e.g.,
> `*.txt eol=lf`) or, inversely, mark certain types as binary (e.g.,
> `*.png binary`).
>
> Both of these suffer from the same issue: the specific file types must
> be listed explicitly in the .gitattributes file, which means that
> either the types must be known ahead of time or all developers must
> remember to update the .gitattributes file every time a new file type
> appears in the project. Which they won't.
>
> The simplest solution in my eyes would be just to change the behavior of
>
>     * text=auto eol=lf
>
> to do both the checkin and checkout EOL conversions on *text files
> only*, using the same text/binary detection algorithm that is already
> in place for the checkin direction. This feels the most intuitive to
> me and I think it would not be a breaking change.
>
> Related IRC discussion:
> http://colabti.org/irclogger/irclogger_log/git?date=2015-04-04#l1143
>
> Thoughts?
>
> Thanks,
> Borek

I think the suggestion makes sense.

I could find 2 things that needs to be improved:

- (1) Specifying "eol=lf" currently overwrites text=auto, this is in convert.c

- (2) The .gitattributes file should overrule core.autocrlf.
      This is what the documentation says, but the code doesn't work like that.
      See convert.c, output_eol()

- (3) we don't have test cases.

I can probably contribute with 3) and may be 1), but the major work is to improve (or re-factor)
the code in convert.c



 

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [hidden email]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Loading...