Introduce a new configuration variable, "core.eolStyle", that allows the
user to set which line endings to use for end-of-line-normalized files
in the working directory. It defaults to "native", which means CRLF on
Windows and LF everywhere else.
Signed-off-by: Eyvind Bernhardsen <eyvind.bernhardsen@gmail.com>
---
Documentation/config.txt | 7 +++++++
Makefile | 3 +++
cache.h | 19 +++++++++++++++++++
config.c | 16 +++++++++++++++-
environment.c | 1 +
5 files changed, 45 insertions(+), 1 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 92f851e..3956ff7 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -207,6 +207,13 @@ core.autocrlf::
the file's `crlf` attribute, or if `crlf` is unspecified,
based on the file's contents. See linkgit:gitattributes[5].
+core.eolStyle::
+ Sets the line ending type to use for text files in the working
+ directory when the `auto-eol` property is set. Alternatives are
+ 'lf', 'crlf', 'native' and 'false'. 'native', the default, uses
+ the platform's native line ending. 'false' disables `auto-eol`
+ line ending conversion. See linkgit:gitattributes[5].
+
core.safecrlf::
If true, makes git check if converting `CRLF` as controlled by
`core.autocrlf` is reversible. Git will verify if a command
diff --git a/Makefile b/Makefile
index 910f471..419532e 100644
--- a/Makefile
+++ b/Makefile
@@ -224,6 +224,8 @@ all::
#
# Define CHECK_HEADER_DEPENDENCIES to check for problems in the hard-coded
# dependency rules.
+#
+# Define NATIVE_CRLF if your platform uses CRLF for line endings.
GIT-VERSION-FILE: FORCE
@$(SHELL_PATH) ./GIT-VERSION-GEN
@@ -989,6 +991,7 @@ ifeq ($(uname_S),Windows)
NO_CURL = YesPlease
NO_PYTHON = YesPlease
BLK_SHA1 = YesPlease
+ NATIVE_CRLF = YesPlease
CC = compat/vcbuild/scripts/clink.pl
AR = compat/vcbuild/scripts/lib.pl
diff --git a/cache.h b/cache.h
index 5eb0573..690511e 100644
--- a/cache.h
+++ b/cache.h
@@ -561,6 +561,25 @@ enum safe_crlf {
extern enum safe_crlf safe_crlf;
+enum auto_crlf {
+ AUTO_CRLF_FALSE = 0,
+ AUTO_CRLF_TRUE = 1,
+ AUTO_CRLF_INPUT = -1,
+};
+
+enum eol_style {
+ EOL_STYLE_FALSE = AUTO_CRLF_FALSE,
+ EOL_STYLE_CRLF = AUTO_CRLF_TRUE,
+ EOL_STYLE_LF = AUTO_CRLF_INPUT,
+#ifdef NATIVE_CRLF
+ EOL_STYLE_NATIVE = EOL_STYLE_CRLF,
+#else
+ EOL_STYLE_NATIVE = EOL_STYLE_LF,
+#endif
+};
+
+extern enum eol_style eol_style;
+
enum branch_track {
BRANCH_TRACK_UNSPECIFIED = -1,
BRANCH_TRACK_NEVER = 0,
diff --git a/config.c b/config.c
index 6963fbe..8a11052 100644
--- a/config.c
+++ b/config.c
@@ -461,7 +461,7 @@ static int git_default_core_config(const char *var, const char *value)
if (!strcmp(var, "core.autocrlf")) {
if (value && !strcasecmp(value, "input")) {
- auto_crlf = -1;
+ auto_crlf = AUTO_CRLF_INPUT;
return 0;
}
auto_crlf = git_config_bool(var, value);
@@ -477,6 +477,20 @@ static int git_default_core_config(const char *var, const char *value)
return 0;
}
+ if (!strcmp(var, "core.eolstyle")) {
+ if (value && !strcasecmp(value, "lf"))
+ eol_style = EOL_STYLE_LF;
+ else if (value && !strcasecmp(value, "crlf"))
+ eol_style = EOL_STYLE_CRLF;
+ else if (value && !strcasecmp(value, "native"))
+ eol_style = EOL_STYLE_NATIVE;
+ else if (! git_config_bool(var, value))
+ eol_style = EOL_STYLE_FALSE;
+ else
+ return error("Malformed value for %s", var);
+ return 0;
+ }
+
if (!strcmp(var, "core.notesref")) {
notes_ref_name = xstrdup(value);
return 0;
diff --git a/environment.c b/environment.c
index 876c5e5..05cd1d5 100644
--- a/environment.c
+++ b/environment.c
@@ -40,6 +40,7 @@ const char *editor_program;
const char *excludes_file;
int auto_crlf = 0; /* 1: both ways, -1: only when adding git objects */
int read_replace_refs = 1;
+enum eol_style eol_style = EOL_STYLE_NATIVE;
enum safe_crlf safe_crlf = SAFE_CRLF_WARN;
unsigned whitespace_rule_cfg = WS_DEFAULT_RULE;
enum branch_track git_branch_track = BRANCH_TRACK_REMOTE;
--
1.7.1.3.gb95c9
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html