Each of the new core.whitespace.* options (enumerated below) can be set to one of: * okay (default): Whitespace of this type is okay * warn: Whitespace of this type should be warned about * error: Whitespace of this type should raise an error * autofix: Whitespace of this type should be automatically fixed The initial options are: * trailing: Whitespace at the end of a line * space-before-tab: SP HT sequence in the initial whitespace of a line * space-indent: At least 8 spaces in a row at the start of a line Example usage: [core "whitespace"] trailing = autofix space-before-tab = error space-indent = warn Signed-off-by: David Symonds <dsymonds@xxxxxxxxx> --- cache.h | 16 ++++++++++++++++ config.c | 28 ++++++++++++++++++++++++++++ environment.c | 3 +++ 3 files changed, 47 insertions(+), 0 deletions(-) diff --git a/cache.h b/cache.h index bfffa05..51e3982 100644 --- a/cache.h +++ b/cache.h @@ -602,4 +602,20 @@ extern int diff_auto_refresh_index; /* match-trees.c */ void shift_tree(const unsigned char *, const unsigned char *, unsigned char *, int); +/* + * whitespace rules. + * used by both diff and apply + */ +enum whitespace_mode { + WS_OKAY = 0, + WS_WARN, + WS_ERROR, + WS_AUTOFIX +}; +extern enum whitespace_mode ws_mode_trailing; +extern enum whitespace_mode ws_mode_space_before_tab; +extern enum whitespace_mode ws_mode_space_indent; +extern enum whitespace_mode git_config_whitespace_mode(const char *, const char *); + + #endif /* CACHE_H */ diff --git a/config.c b/config.c index dc3148d..8e6f252 100644 --- a/config.c +++ b/config.c @@ -297,6 +297,19 @@ int git_config_bool(const char *name, const char *value) return git_config_int(name, value) != 0; } +enum whitespace_mode git_config_whitespace_mode(const char *name, const char *value) +{ + if (!strcasecmp(value, "okay")) + return WS_OKAY; + if (!strcasecmp(value, "warn")) + return WS_WARN; + if (!strcasecmp(value, "error")) + return WS_ERROR; + if (!strcasecmp(value, "autofix")) + return WS_AUTOFIX; + die("bad config value for '%s' in %s", name, config_file_name); +} + int git_default_config(const char *var, const char *value) { /* This needs a better name */ @@ -431,6 +444,21 @@ int git_default_config(const char *var, const char *value) return 0; } + if (!strcmp(var, "core.whitespace.trailing")) { + ws_mode_trailing = git_config_whitespace_mode(var, value); + return 0; + } + + if (!strcmp(var, "core.whitespace.space-before-tab")) { + ws_mode_space_before_tab = git_config_whitespace_mode(var, value); + return 0; + } + + if (!strcmp(var, "core.whitespace.space-indent")) { + ws_mode_space_indent = git_config_whitespace_mode(var, value); + return 0; + } + /* Add other config variables here and to Documentation/config.txt. */ return 0; } diff --git a/environment.c b/environment.c index b5a6c69..71502fc 100644 --- a/environment.c +++ b/environment.c @@ -35,6 +35,9 @@ int pager_in_use; int pager_use_color = 1; char *editor_program; int auto_crlf = 0; /* 1: both ways, -1: only when adding git objects */ +enum whitespace_mode ws_mode_trailing = WS_OKAY; +enum whitespace_mode ws_mode_space_before_tab = WS_OKAY; +enum whitespace_mode ws_mode_space_indent = WS_OKAY; /* This is set by setup_git_dir_gently() and/or git_default_config() */ char *git_work_tree_cfg; -- 1.5.3.1 - 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