summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 59aa256)
raw | patch | inline | side by side (parent: 59aa256)
author | Junio C Hamano <junkio@cox.net> | |
Mon, 27 Feb 2006 22:47:45 +0000 (14:47 -0800) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Tue, 28 Feb 2006 01:36:00 +0000 (17:36 -0800) |
The new configuration option apply.whitespace can take one of
"warn", "error", "error-all", or "strip". When git-apply is run
to apply the patch to the index, they are used as the default
value if there is no command line --whitespace option.
Andrew can now tell people who feed him git trees to update to
this version and say:
git repo-config apply.whitespace error
Signed-off-by: Junio C Hamano <junkio@cox.net>
"warn", "error", "error-all", or "strip". When git-apply is run
to apply the patch to the index, they are used as the default
value if there is no command line --whitespace option.
Andrew can now tell people who feed him git trees to update to
this version and say:
git repo-config apply.whitespace error
Signed-off-by: Junio C Hamano <junkio@cox.net>
apply.c | patch | blob | history | |
cache.h | patch | blob | history | |
environment.c | patch | blob | history |
index f01e3caea41831d996ad5db9f702ac0f4668fc65..4748d7f819aa82c1ce8d3808c7edee3bbbdba871 100644 (file)
--- a/apply.c
+++ b/apply.c
"git-apply [--stat] [--numstat] [--summary] [--check] [--index] [--apply] [--no-add] [--index-info] [--allow-binary-replacement] [-z] [-pNUM] <patch>...";
static enum whitespace_eol {
- nowarn,
+ nowarn_whitespace,
warn_on_whitespace,
error_on_whitespace,
- strip_and_apply,
-} new_whitespace = nowarn;
+ strip_whitespace,
+} new_whitespace = nowarn_whitespace;
static int whitespace_error = 0;
static int squelch_whitespace_errors = 5;
static int applied_after_stripping = 0;
static const char *patch_input_file = NULL;
+static void parse_whitespace_option(const char *option)
+{
+ if (!option) {
+ new_whitespace = nowarn_whitespace;
+ return;
+ }
+ if (!strcmp(option, "warn")) {
+ new_whitespace = warn_on_whitespace;
+ return;
+ }
+ if (!strcmp(option, "error")) {
+ new_whitespace = error_on_whitespace;
+ return;
+ }
+ if (!strcmp(option, "error-all")) {
+ new_whitespace = error_on_whitespace;
+ squelch_whitespace_errors = 0;
+ return;
+ }
+ if (!strcmp(option, "strip")) {
+ new_whitespace = strip_whitespace;
+ return;
+ }
+ die("unrecognized whitespace option '%s'", option);
+}
+
/*
* For "diff-stat" like behaviour, we keep track of the biggest change
* we've seen, and the longest filename. That allows us to do simple
@@ -832,7 +858,7 @@ static int parse_fragment(char *line, unsigned long size, struct patch *patch, s
* That is, an addition of an empty line would check
* the '+' here. Sneaky...
*/
- if ((new_whitespace != nowarn) &&
+ if ((new_whitespace != nowarn_whitespace) &&
isspace(line[len-2])) {
whitespace_error++;
if (squelch_whitespace_errors &&
* patch[plen] is '\n'.
*/
int add_nl_to_tail = 0;
- if ((new_whitespace == strip_and_apply) &&
+ if ((new_whitespace == strip_whitespace) &&
1 < plen && isspace(patch[plen-1])) {
if (patch[plen] == '\n')
add_nl_to_tail = 1;
return 0;
}
+static int git_apply_config(const char *var, const char *value)
+{
+ if (!strcmp(var, "apply.whitespace")) {
+ apply_default_whitespace = strdup(value);
+ return 0;
+ }
+ return git_default_config(var, value);
+}
+
+
int main(int argc, char **argv)
{
int i;
int read_stdin = 1;
+ const char *whitespace_option = NULL;
for (i = 1; i < argc; i++) {
const char *arg = argv[i];
continue;
}
if (!strncmp(arg, "--whitespace=", 13)) {
- if (!strcmp(arg+13, "warn")) {
- new_whitespace = warn_on_whitespace;
- continue;
- }
- if (!strcmp(arg+13, "error")) {
- new_whitespace = error_on_whitespace;
- continue;
- }
- if (!strcmp(arg+13, "error-all")) {
- new_whitespace = error_on_whitespace;
- squelch_whitespace_errors = 0;
- continue;
- }
- if (!strcmp(arg+13, "strip")) {
- new_whitespace = strip_and_apply;
- continue;
- }
- die("unrecognized whitespace option '%s'", arg+13);
+ whitespace_option = arg + 13;
+ parse_whitespace_option(arg + 13);
+ continue;
}
if (check_index && prefix_length < 0) {
prefix = setup_git_directory();
prefix_length = prefix ? strlen(prefix) : 0;
- git_config(git_default_config);
+ git_config(git_apply_config);
+ if (!whitespace_option && apply_default_whitespace)
+ parse_whitespace_option(apply_default_whitespace);
}
if (0 < prefix_length)
arg = prefix_filename(prefix, prefix_length, arg);
index 9f4adf5c3f960eb1c86e3381f28738edf674c325..f686e72e66249815bb7d209a8360a8ab8b1e6e67 100644 (file)
--- a/cache.h
+++ b/cache.h
extern int commit_index_file(struct cache_file *);
extern void rollback_index_file(struct cache_file *);
+/* Environment bits from configuration mechanism */
extern int trust_executable_bit;
extern int only_use_symrefs;
extern int diff_rename_limit_default;
extern int shared_repository;
+extern const char *apply_default_whitespace;
#define GIT_REPO_VERSION 0
extern int repository_format_version;
diff --git a/environment.c b/environment.c
index 0596fc647be37343371ae5a266906dab35707076..73e4b1c8b7a97e5c176b51a7ce1f7d4ee802f86b 100644 (file)
--- a/environment.c
+++ b/environment.c
int repository_format_version = 0;
char git_commit_encoding[MAX_ENCODING_LENGTH] = "utf-8";
int shared_repository = 0;
+const char *apply_default_whitespace = NULL;
static char *git_dir, *git_object_dir, *git_index_file, *git_refs_dir,
*git_graft_file;