git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alex Stangl <alex@stangl.us>
To: git@vger.kernel.org
Subject: error: core.autocrlf=input conflicts with core.eol=crlf
Date: Thu, 4 Dec 2014 23:42:05 -0600	[thread overview]
Message-ID: <20141205054205.GA71681@scout.stangl.us> (raw)

Hi,

There seems to be problems with the checks in the git code for conflicts
between config values of core.autocrlf and core.eol. Because the various
config files are read in separate passes, and the conflict check happens
on the fly, it creates a situation where the order of the config file
entries matters. This seems like a bug or at least a POLA violation --
ordering of lines within a section of a config file is not usually
significant.

Example: User has core.autocrlf=input in his ~/.gitconfig. In his
project-level .git/config he wants to set core.autocrlf=false and
core.eol=crlf. If the core.autocrlf=false comes first, then all is
well and no conflict is reported. If the core.eol=crlf line comes
first, then at the time this line is getting parsed, core.autocrlf
is still set at "input" from ~/.gitconfig, and execution aborts:

error: core.autocrlf=input conflicts with core.eol=crlf

It seems like the conflict check should be made at the end of the
config file parsing, not on the fly. I was tempted to create a patch,
however I am unfamilar with the codebase, and didn't understand all
the places where the config file parsing is called, so I'm not sure
of the ramifications of any proposed change. A benefit of the current
approach is that it reports the line number where it aborted in the
config file. Trying to retain this and at the same time defer the
check until the end could get complicated.

Besides interaction between multiple levels of config files, the
same sort of ordering issue can arise in conjunction with command-line
config overrides.

Example: User has core.autocrlf=input in his project-level .git/config.
This command works fine:
$ git -c core.autocrlf=false -c core.eol=crlf status
This command blows up with conflict error:
$ git -c core.eol=crlf -c core.autocrlf=false status

I tested with git versions 1.9.3 and 2.1.0.

Alex

             reply	other threads:[~2014-12-05  5:49 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-05  5:42 Alex Stangl [this message]
     [not found] ` <54816863.90208@web.de>
2014-12-05 15:55   ` error: core.autocrlf=input conflicts with core.eol=crlf Torsten Bögershausen
2014-12-05 16:33     ` Alex Stangl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141205054205.GA71681@scout.stangl.us \
    --to=alex@stangl.us \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).