Re: 'eol' documentation confusion

2015-06-25 Thread Torsten Bögershausen
On 2015-06-22 18.11, Junio C Hamano wrote:
 Torsten Bögershausen tbo...@web.de writes:
 
 eol=lf or eol=crlf are the only useful settings.
 Everything else is ignored because it does not make sense.

 See convert.c:
 static enum eol git_path_check_eol()
 
 That makes me wonder...
 
 The original reasoning behind the current behaviour that we ignore
 unknown values given to configuration variables and attributes is so
 that people can use the same file that has values that are
 understood by newer versions of Git with older versions of Git.
 
 You may be trying the eol=cleverLF setting introduced in Git version
 47-prerelease by adding it to .git/info/attributes, and may have
 found it useful.  But you may also have to use the same repository
 on another machine that you didn't install that future version of
 Git over the network filesystem.  Barfing and not proceeding when we
 see unknown eol=cleverLF does not sound like a nice thing to do,
 which is why we just ignore and behave as if the setting was not
 there.
 
 Ideally, however, I think we should ignore an unknown setting as
 long as it does not matter (i.e. we do not come to the codepath that
 wants to know eol settings for the path, e.g. running git log to
 show only the commit log messages and the topology of the history),
 but we should error out when the unknown setting possibly matters
 (i.e. we do need the eol setting for the path in order to correctly
 convert the contents to end-user's liking).
 
 Thoughts (and patches ;-)?
In short:
Good idea, patches follow within the next weeks/months

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: 'eol' documentation confusion

2015-06-22 Thread Junio C Hamano
Torsten Bögershausen tbo...@web.de writes:

 eol=lf or eol=crlf are the only useful settings.
 Everything else is ignored because it does not make sense.

 See convert.c:
 static enum eol git_path_check_eol()

That makes me wonder...

The original reasoning behind the current behaviour that we ignore
unknown values given to configuration variables and attributes is so
that people can use the same file that has values that are
understood by newer versions of Git with older versions of Git.

You may be trying the eol=cleverLF setting introduced in Git version
47-prerelease by adding it to .git/info/attributes, and may have
found it useful.  But you may also have to use the same repository
on another machine that you didn't install that future version of
Git over the network filesystem.  Barfing and not proceeding when we
see unknown eol=cleverLF does not sound like a nice thing to do,
which is why we just ignore and behave as if the setting was not
there.

Ideally, however, I think we should ignore an unknown setting as
long as it does not matter (i.e. we do not come to the codepath that
wants to know eol settings for the path, e.g. running git log to
show only the commit log messages and the topology of the history),
but we should error out when the unknown setting possibly matters
(i.e. we do need the eol setting for the path in order to correctly
convert the contents to end-user's liking).

Thoughts (and patches ;-)?


--
To unsubscribe from this list: send the line unsubscribe git in


Re: 'eol' documentation confusion

2015-06-22 Thread Torsten Bögershausen

On 06/21/2015 04:16 PM, Robert Dailey wrote:

On Sun, Jun 21, 2015 at 9:04 AM, Robert Dailey rcdailey.li...@gmail.com wrote:

Upon inspection of the gitattributes documentation page here:
https://git-scm.com/docs/gitattributes

When comparing the documentation for 'text' with 'eol', I see the
following missing explanations for 'eol':

* eol
* -eol

Maybe the fact that these are missing means they are not valid to use.
There is also the issue that `text` usually controls EOL anyway. Is
there ever any reason to set eol in a way differently than explained
in the documentation (that is, `eol=lf` or `eol=crlf`)?

No.
eol=lf or eol=crlf are the only useful settings.
Everything else is ignored because it does not make sense.

See convert.c:
static enum eol git_path_check_eol()


--
To unsubscribe from this list: send the line unsubscribe git in


'eol' documentation confusion

2015-06-21 Thread Robert Dailey
Upon inspection of the gitattributes documentation page here:
https://git-scm.com/docs/gitattributes

When comparing the documentation for 'text' with 'eol', I see the
following missing explanations for 'eol':

* eol
* -eol

Maybe the fact that these are missing means they are not valid to use.
There is also the issue that `text` usually controls EOL anyway. Is
there ever any reason to set eol in a way differently than explained
in the documentation (that is, `eol=lf` or `eol=crlf`)?

For example, what if you want a file to be treated as text BUT you do
not want it to perform EOL normalization at all. Could you do this?

foo.txt text -eol

Just at first glance, this to me would mean line endings on checkin
and checkout are not touched (CRLF could be checked in). Is this
possible?

What about setting `eol` but not `text`?

Honestly it seems like `eol` is just a supplementary setting for
`text` and was never intended to be used in ways that are
undocumented. Some explanation to help uncloud this would help, or
maybe I missed something in the documentation that explains this.
--
To unsubscribe from this list: send the line unsubscribe git in


Re: 'eol' documentation confusion

2015-06-21 Thread Robert Dailey
On Sun, Jun 21, 2015 at 9:04 AM, Robert Dailey rcdailey.li...@gmail.com wrote:
 Upon inspection of the gitattributes documentation page here:
 https://git-scm.com/docs/gitattributes

 When comparing the documentation for 'text' with 'eol', I see the
 following missing explanations for 'eol':

 * eol
 * -eol

 Maybe the fact that these are missing means they are not valid to use.
 There is also the issue that `text` usually controls EOL anyway. Is
 there ever any reason to set eol in a way differently than explained
 in the documentation (that is, `eol=lf` or `eol=crlf`)?

 For example, what if you want a file to be treated as text BUT you do
 not want it to perform EOL normalization at all. Could you do this?

 foo.txt text -eol

 Just at first glance, this to me would mean line endings on checkin
 and checkout are not touched (CRLF could be checked in). Is this
 possible?

 What about setting `eol` but not `text`?

 Honestly it seems like `eol` is just a supplementary setting for
 `text` and was never intended to be used in ways that are
 undocumented. Some explanation to help uncloud this would help, or
 maybe I missed something in the documentation that explains this.

I did a few tests out of curiosity:

* eol

This allowed CRLF to be committed in a file named `foo.txt` (I saw ^M
in the diff, which I think means CR character, and treats this
character as an error)

* text=auto eol

This did not differ in behavior from `* text=auto` from what I could
see. It removed CR characters in the repository on check in.

* text=auto -eol

Same as before, the addition of `-eol` did not change the behavior at all.

So yeah, I'm still horribly confused. None of these scenarios make any
sense. The only time I ever set `eol` explicitly is to either do
`eol=lf` or `eol=crlf`.
--
To unsubscribe from this list: send the line unsubscribe git in