Introduce a new attribute called "auto-eol" and a config variable, "core.eolStyle", which will enable line ending normalisation using the autocrlf mechanism. The intent is to enable autocrlf in an alternative way, splitting the existing "core.autocrlf" config variable into two: - a per-repository "line endings should be normalised in this repository" setting, activated by setting the auto-eol attribute (usually on all files in the repository) - a config variable, "core.eolStyle" which lets the user decide which line endings are preferred in the working directory Possible values for "core.eolStyle" are: - "lf", meaning that LF line endings are preferred - "crlf", meaning that CRLF line endings are preferred - "native" (the default), crlf or lf according to platform - "false", which disables end-of-line conversion even when auto-eol is set "core.autocrlf" will override auto-eol when set to anything but "false". Signed-off-by: Eyvind Bernhardsen <eyvind.bernhardsen@xxxxxxxxx> --- Makefile | 3 +++ cache.h | 19 +++++++++++++++++++ config.c | 16 +++++++++++++++- environment.c | 1 + 4 files changed, 38 insertions(+), 1 deletions(-) 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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html