Merge branch 'sb/diff-color-moved-config-option-fixup'
Minor inconsistency fix. * sb/diff-color-moved-config-option-fixup: diff: align move detection error handling with other optionsmaint
						commit
						932b867be0
					
				
							
								
								
									
										25
									
								
								diff.c
								
								
								
								
							
							
						
						
									
										25
									
								
								diff.c
								
								
								
								
							|  | @ -291,7 +291,7 @@ static int parse_color_moved(const char *arg) | ||||||
| 		return error(_("color moved setting must be one of 'no', 'default', 'blocks', 'zebra', 'dimmed-zebra', 'plain'")); | 		return error(_("color moved setting must be one of 'no', 'default', 'blocks', 'zebra', 'dimmed-zebra', 'plain'")); | ||||||
| } | } | ||||||
|  |  | ||||||
| static int parse_color_moved_ws(const char *arg) | static unsigned parse_color_moved_ws(const char *arg) | ||||||
| { | { | ||||||
| 	int ret = 0; | 	int ret = 0; | ||||||
| 	struct string_list l = STRING_LIST_INIT_DUP; | 	struct string_list l = STRING_LIST_INIT_DUP; | ||||||
|  | @ -312,15 +312,19 @@ static int parse_color_moved_ws(const char *arg) | ||||||
| 			ret |= XDF_IGNORE_WHITESPACE; | 			ret |= XDF_IGNORE_WHITESPACE; | ||||||
| 		else if (!strcmp(sb.buf, "allow-indentation-change")) | 		else if (!strcmp(sb.buf, "allow-indentation-change")) | ||||||
| 			ret |= COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE; | 			ret |= COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE; | ||||||
| 		else | 		else { | ||||||
| 			error(_("ignoring unknown color-moved-ws mode '%s'"), sb.buf); | 			ret |= COLOR_MOVED_WS_ERROR; | ||||||
|  | 			error(_("unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'"), sb.buf); | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		strbuf_release(&sb); | 		strbuf_release(&sb); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if ((ret & COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE) && | 	if ((ret & COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE) && | ||||||
| 	    (ret & XDF_WHITESPACE_FLAGS)) | 	    (ret & XDF_WHITESPACE_FLAGS)) { | ||||||
| 		die(_("color-moved-ws: allow-indentation-change cannot be combined with other white space modes")); | 		error(_("color-moved-ws: allow-indentation-change cannot be combined with other white space modes")); | ||||||
|  | 		ret |= COLOR_MOVED_WS_ERROR; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	string_list_clear(&l, 0); | 	string_list_clear(&l, 0); | ||||||
|  |  | ||||||
|  | @ -341,8 +345,8 @@ int git_diff_ui_config(const char *var, const char *value, void *cb) | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
| 	if (!strcmp(var, "diff.colormovedws")) { | 	if (!strcmp(var, "diff.colormovedws")) { | ||||||
| 		int cm = parse_color_moved_ws(value); | 		unsigned cm = parse_color_moved_ws(value); | ||||||
| 		if (cm < 0) | 		if (cm & COLOR_MOVED_WS_ERROR) | ||||||
| 			return -1; | 			return -1; | ||||||
| 		diff_color_moved_ws_default = cm; | 		diff_color_moved_ws_default = cm; | ||||||
| 		return 0; | 		return 0; | ||||||
|  | @ -5034,10 +5038,13 @@ int diff_opt_parse(struct diff_options *options, | ||||||
| 	else if (skip_prefix(arg, "--color-moved=", &arg)) { | 	else if (skip_prefix(arg, "--color-moved=", &arg)) { | ||||||
| 		int cm = parse_color_moved(arg); | 		int cm = parse_color_moved(arg); | ||||||
| 		if (cm < 0) | 		if (cm < 0) | ||||||
| 			die("bad --color-moved argument: %s", arg); | 			return error("bad --color-moved argument: %s", arg); | ||||||
| 		options->color_moved = cm; | 		options->color_moved = cm; | ||||||
| 	} else if (skip_prefix(arg, "--color-moved-ws=", &arg)) { | 	} else if (skip_prefix(arg, "--color-moved-ws=", &arg)) { | ||||||
| 		options->color_moved_ws_handling = parse_color_moved_ws(arg); | 		unsigned cm = parse_color_moved_ws(arg); | ||||||
|  | 		if (cm & COLOR_MOVED_WS_ERROR) | ||||||
|  | 			return -1; | ||||||
|  | 		options->color_moved_ws_handling = cm; | ||||||
| 	} else if (skip_to_optional_arg_default(arg, "--color-words", &options->word_regex, NULL)) { | 	} else if (skip_to_optional_arg_default(arg, "--color-words", &options->word_regex, NULL)) { | ||||||
| 		options->use_color = 1; | 		options->use_color = 1; | ||||||
| 		options->word_diff = DIFF_WORDS_COLOR; | 		options->word_diff = DIFF_WORDS_COLOR; | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								diff.h
								
								
								
								
							
							
						
						
									
										3
									
								
								diff.h
								
								
								
								
							|  | @ -225,7 +225,8 @@ struct diff_options { | ||||||
|  |  | ||||||
| 	/* XDF_WHITESPACE_FLAGS regarding block detection are set at 2, 3, 4 */ | 	/* XDF_WHITESPACE_FLAGS regarding block detection are set at 2, 3, 4 */ | ||||||
| 	#define COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE (1<<5) | 	#define COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE (1<<5) | ||||||
| 	int color_moved_ws_handling; | 	#define COLOR_MOVED_WS_ERROR (1<<0) | ||||||
|  | 	unsigned color_moved_ws_handling; | ||||||
|  |  | ||||||
| 	struct repository *repo; | 	struct repository *repo; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -1890,6 +1890,24 @@ test_expect_success 'compare whitespace delta across moved blocks' ' | ||||||
| 	test_cmp expected actual | 	test_cmp expected actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'bogus settings in move detection erroring out' ' | ||||||
|  | 	test_must_fail git diff --color-moved=bogus 2>err && | ||||||
|  | 	test_i18ngrep "must be one of" err && | ||||||
|  | 	test_i18ngrep bogus err && | ||||||
|  |  | ||||||
|  | 	test_must_fail git -c diff.colormoved=bogus diff 2>err && | ||||||
|  | 	test_i18ngrep "must be one of" err && | ||||||
|  | 	test_i18ngrep "from command-line config" err && | ||||||
|  |  | ||||||
|  | 	test_must_fail git diff --color-moved-ws=bogus 2>err && | ||||||
|  | 	test_i18ngrep "possible values" err && | ||||||
|  | 	test_i18ngrep bogus err && | ||||||
|  |  | ||||||
|  | 	test_must_fail git -c diff.colormovedws=bogus diff 2>err && | ||||||
|  | 	test_i18ngrep "possible values" err && | ||||||
|  | 	test_i18ngrep "from command-line config" err | ||||||
|  | ' | ||||||
|  |  | ||||||
| test_expect_success 'compare whitespace delta incompatible with other space options' ' | test_expect_success 'compare whitespace delta incompatible with other space options' ' | ||||||
| 	test_must_fail git diff \ | 	test_must_fail git diff \ | ||||||
| 		--color-moved-ws=allow-indentation-change,ignore-all-space \ | 		--color-moved-ws=allow-indentation-change,ignore-all-space \ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano