all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Git refuses to commit files with DOS EOL
@ 2015-05-30 11:09 Eli Zaretskii
  2015-05-30 16:35 ` Paul Eggert
  0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2015-05-30 11:09 UTC (permalink / raw
  To: emacs-devel

The pre-commit hook complains about trailing whitespace in such
files.  I needed to use --no-verify to get past it.

Why is it doing that?



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Git refuses to commit files with DOS EOL
  2015-05-30 11:09 Git refuses to commit files with DOS EOL Eli Zaretskii
@ 2015-05-30 16:35 ` Paul Eggert
  2015-05-30 18:33   ` Eli Zaretskii
  0 siblings, 1 reply; 9+ messages in thread
From: Paul Eggert @ 2015-05-30 16:35 UTC (permalink / raw
  To: Eli Zaretskii, emacs-devel

Eli Zaretskii wrote:
> The pre-commit hook complains about trailing whitespace in such
> files.  I needed to use --no-verify to get past it.
>
> Why is it doing that?

Git keeps track of text files with CRLF vs LF endings, and autoconverts from one 
format to another when it is run on platforms that prefer one or the other.  It 
also knows about binary formats, where there's no conversion.  It needs to do 
all this stuff in order for merging to work reliably, since merging often works 
on a line-by-line basis.

To get this all to work, you sometimes have to tell Git about files that don't 
follow the ordinary rules: e.g., they are text files that should use CRLF 
endings even on GNUish and POSIX platforms.  This is done in the .gitattributes 
file.  There's a man page for .gitattributes, as well as one for the 'git 
check-attr' command.  The actual set of features is more complicated than what 
I've mentioned here, and the GNU Emacs .gitattributes file doesn't use all the 
features.

I patched .gitattributes to mention the CRLF-oriented files you recently added 
to the test cases.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Git refuses to commit files with DOS EOL
  2015-05-30 16:35 ` Paul Eggert
@ 2015-05-30 18:33   ` Eli Zaretskii
  2015-05-30 18:52     ` Paul Eggert
  0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2015-05-30 18:33 UTC (permalink / raw
  To: Paul Eggert; +Cc: emacs-devel

> Date: Sat, 30 May 2015 09:35:49 -0700
> From: Paul Eggert <eggert@cs.ucla.edu>
> 
> Eli Zaretskii wrote:
> > The pre-commit hook complains about trailing whitespace in such
> > files.  I needed to use --no-verify to get past it.
> >
> > Why is it doing that?
> 
> Git keeps track of text files with CRLF vs LF endings, and autoconverts from one 
> format to another when it is run on platforms that prefer one or the other.  It 
> also knows about binary formats, where there's no conversion.  It needs to do 
> all this stuff in order for merging to work reliably, since merging often works 
> on a line-by-line basis.

I've set up Git to not perform any EOL conversions.

> To get this all to work, you sometimes have to tell Git about files that don't 
> follow the ordinary rules: e.g., they are text files that should use CRLF 
> endings even on GNUish and POSIX platforms.  This is done in the .gitattributes 
> file.  There's a man page for .gitattributes, as well as one for the 'git 
> check-attr' command.  The actual set of features is more complicated than what 
> I've mentioned here, and the GNU Emacs .gitattributes file doesn't use all the 
> features.
> 
> I patched .gitattributes to mention the CRLF-oriented files you recently added 
> to the test cases.

Thanks.

So you are saying that adding a file with DOS EOLs requires such
additions to .gitattributes?

Is that because of our pre-commit hook, or is this something general
with Git?



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Git refuses to commit files with DOS EOL
  2015-05-30 18:33   ` Eli Zaretskii
@ 2015-05-30 18:52     ` Paul Eggert
  2015-05-30 19:24       ` Eli Zaretskii
  0 siblings, 1 reply; 9+ messages in thread
From: Paul Eggert @ 2015-05-30 18:52 UTC (permalink / raw
  To: Eli Zaretskii; +Cc: emacs-devel

Eli Zaretskii wrote:
> So you are saying that adding a file with DOS EOLs requires such
> additions to .gitattributes?

Yes, basically.

> Is that because of our pre-commit hook, or is this something general
> with Git?

Both.  It's in our pre-commit hook, and our pre-commit hook uses a Git general 
facility to check this.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Git refuses to commit files with DOS EOL
  2015-05-30 18:52     ` Paul Eggert
@ 2015-05-30 19:24       ` Eli Zaretskii
  2015-05-30 19:40         ` Paul Eggert
  0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2015-05-30 19:24 UTC (permalink / raw
  To: Paul Eggert; +Cc: emacs-devel

> Date: Sat, 30 May 2015 11:52:10 -0700
> From: Paul Eggert <eggert@cs.ucla.edu>
> Cc: emacs-devel@gnu.org
> 
> > Is that because of our pre-commit hook, or is this something general
> > with Git?
> 
> Both.  It's in our pre-commit hook, and our pre-commit hook uses a Git general 
> facility to check this.

I mean, if some other project using Git doesn't have a pre-commit
hook, do I still need to make these changes in .gitattributes for
files with DOS EOLs?



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Git refuses to commit files with DOS EOL
  2015-05-30 19:24       ` Eli Zaretskii
@ 2015-05-30 19:40         ` Paul Eggert
  2015-05-31 14:27           ` Eli Zaretskii
  0 siblings, 1 reply; 9+ messages in thread
From: Paul Eggert @ 2015-05-30 19:40 UTC (permalink / raw
  To: Eli Zaretskii; +Cc: emacs-devel

Eli Zaretskii wrote:
> if some other project using Git doesn't have a pre-commit
> hook, do I still need to make these changes in .gitattributes for
> files with DOS EOLs?

It depends on the maintenance style the other project wants to use, and which 
versions of Git they want to require (as this stuff has changed since older Git 
versions).  It's a long story.  For an intro, please see:

http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Git refuses to commit files with DOS EOL
  2015-05-30 19:40         ` Paul Eggert
@ 2015-05-31 14:27           ` Eli Zaretskii
  2015-05-31 19:54             ` Paul Eggert
  0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2015-05-31 14:27 UTC (permalink / raw
  To: Paul Eggert; +Cc: emacs-devel

> Date: Sat, 30 May 2015 12:40:21 -0700
> From: Paul Eggert <eggert@cs.ucla.edu>
> CC: emacs-devel@gnu.org
> 
>     if some other project using Git doesn't have a pre-commit
>     hook, do I still need to make these changes in .gitattributes for
>     files with DOS EOLs?
> 
> It depends on the maintenance style the other project wants to use, and which versions of Git they want to require (as this stuff has changed since older Git versions). It's a long story. For an intro, please see:
> 
> http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/

Thanks, but that doesn't even mention 'whitespace'.  It talks only
about EOL conversion, which, as I've said, is disabled in my Git
installation (core.autcrlf is unset, which means it's false by
default).  I hope everybody else here does the same, although that
page (and numerous others I've seen) all advise to turn on EOL
conversion, which is simply wrong.

After reading all that stuff, including the gitattributes man page, I
have only one question: why files like dostorture.c are marked
"-whitespace" and not "whitespace=cr-at-eol"?  The latter seems to be
more specific, and still allows detection of trailing whitespace in
files with DOS-style EOL.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Git refuses to commit files with DOS EOL
  2015-05-31 14:27           ` Eli Zaretskii
@ 2015-05-31 19:54             ` Paul Eggert
  2015-06-01 15:03               ` Eli Zaretskii
  0 siblings, 1 reply; 9+ messages in thread
From: Paul Eggert @ 2015-05-31 19:54 UTC (permalink / raw
  To: Eli Zaretskii; +Cc: emacs-devel

Eli Zaretskii wrote:
> that
> page (and numerous others I've seen) all advise to turn on EOL
> conversion, which is simply wrong.

Shrug.  It's right for many projects, probably most.  But that's not a topic we 
need to worry about here.

> After reading all that stuff, including the gitattributes man page, I
> have only one question: why files like dostorture.c are marked
> "-whitespace" and not "whitespace=cr-at-eol"?  The latter seems to be
> more specific, and still allows detection of trailing whitespace in
> files with DOS-style EOL

When I wrote that, I was concerned about portability to older versions of git, 
where the crlf conversion algorithms were different.  I didn't want to worry 
about the hassle of testing this stuff on older Git versions, so I used a 
conservative (i.e., loose) setting for the CRLF files.  If you can verify that a 
stricter setting based on cr-at-eol is useful on older Git versions on GNUish 
platforms, feel free to change to the stricter setting.

I suggest testing Git 1.7.1 for this, as per 
<https://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00037.html>.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Git refuses to commit files with DOS EOL
  2015-05-31 19:54             ` Paul Eggert
@ 2015-06-01 15:03               ` Eli Zaretskii
  0 siblings, 0 replies; 9+ messages in thread
From: Eli Zaretskii @ 2015-06-01 15:03 UTC (permalink / raw
  To: Paul Eggert; +Cc: emacs-devel

> Date: Sun, 31 May 2015 12:54:47 -0700
> From: Paul Eggert <eggert@cs.ucla.edu>
> CC: emacs-devel@gnu.org
> 
>     that
>     page (and numerous others I've seen) all advise to turn on EOL
>     conversion, which is simply wrong.
> 
> Shrug. It's right for many projects, probably most. But that's not a topic we need to worry about here.

If it is not right for Emacs (and I do hope we agree on that), I don't
see why it would be right for many other projects, let alone most.

But I agree it's not a topic to worry about here.

>     After reading all that stuff, including the gitattributes man page, I
>     have only one question: why files like dostorture.c are marked
>     "-whitespace" and not "whitespace=cr-at-eol"?  The latter seems to be
>     more specific, and still allows detection of trailing whitespace in
>     files with DOS-style EOL
> 
> When I wrote that, I was concerned about portability to older versions of git, where the crlf conversion algorithms were different. I didn't want to worry about the hassle of testing this stuff on older Git versions, so I used a conservative (i.e., loose) setting for the CRLF files. If you can verify that a stricter setting based on cr-at-eol is useful on older Git versions on GNUish platforms, feel free to change to the stricter setting.
> 
> I suggest testing Git 1.7.1 for this, as per <https://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00037.html>.

I don't have access to a system with Git 1.7.1, and I cannot find this
setting mentioned in the Release Notes (is there a better resource for
looking up a Git release number that introduced some feature?).

However, according to Git's own git repository, this setting was added
in Jan 2008, in a commit about which "git describe" says:

  $ git describe b2979ff5
  v1.5.4-35-gb2979ff

So I think it is safe for us to use it.

I've pushed a change to that effect.

Thanks.



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-06-01 15:03 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-30 11:09 Git refuses to commit files with DOS EOL Eli Zaretskii
2015-05-30 16:35 ` Paul Eggert
2015-05-30 18:33   ` Eli Zaretskii
2015-05-30 18:52     ` Paul Eggert
2015-05-30 19:24       ` Eli Zaretskii
2015-05-30 19:40         ` Paul Eggert
2015-05-31 14:27           ` Eli Zaretskii
2015-05-31 19:54             ` Paul Eggert
2015-06-01 15:03               ` Eli Zaretskii

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.