range-diff: make --dual-color the default mode
After using this command extensively for the last two months, this developer came to the conclusion that even if the dual color mode still leaves a lot of room for confusion about what was actually changed, the non-dual color mode is substantially worse in that regard. Therefore, we really want to make the dual color mode the default. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									d1f87a2d9c
								
							
						
					
					
						commit
						275267937b
					
				|  | @ -9,7 +9,7 @@ SYNOPSIS | |||
| -------- | ||||
| [verse] | ||||
| 'git range-diff' [--color=[<when>]] [--no-color] [<diff-options>] | ||||
| 	[--dual-color] [--creation-factor=<factor>] | ||||
| 	[--no-dual-color] [--creation-factor=<factor>] | ||||
| 	( <range1> <range2> | <rev1>...<rev2> | <base> <rev1> <rev2> ) | ||||
|  | ||||
| DESCRIPTION | ||||
|  | @ -31,11 +31,14 @@ all of their ancestors have been shown. | |||
|  | ||||
| OPTIONS | ||||
| ------- | ||||
| --dual-color:: | ||||
| 	When the commit diffs differ, recreate the original diffs' | ||||
| 	coloring, and add outer -/+ diff markers with the *background* | ||||
| 	being red/green to make it easier to see e.g. when there was a | ||||
| 	change in what exact lines were added. | ||||
| --no-dual-color:: | ||||
| 	When the commit diffs differ, `git range-diff` recreates the | ||||
| 	original diffs' coloring, and adds outer -/+ diff markers with | ||||
| 	the *background* being red/green to make it easier to see e.g. | ||||
| 	when there was a change in what exact lines were added. This is | ||||
| 	known to `range-diff` as "dual coloring". Use `--no-dual-color` | ||||
| 	to revert to color all lines according to the outer diff markers | ||||
| 	(and completely ignore the inner diff when it comes to color). | ||||
|  | ||||
| --creation-factor=<percent>:: | ||||
| 	Set the creation/deletion cost fudge factor to `<percent>`. | ||||
|  | @ -118,15 +121,16 @@ line (with a perfect match) is yellow like the commit header of `git | |||
| show`'s output, and the third line colors the old commit red, the new | ||||
| one green and the rest like `git show`'s commit header. | ||||
|  | ||||
| The color-coded diff is actually a bit hard to read, though, as it | ||||
| colors the entire lines red or green. The line that added "What is | ||||
| unexpected" in the old commit, for example, is completely red, even if | ||||
| the intent of the old commit was to add something. | ||||
| A naive color-coded diff of diffs is actually a bit hard to read, | ||||
| though, as it colors the entire lines red or green. The line that added | ||||
| "What is unexpected" in the old commit, for example, is completely red, | ||||
| even if the intent of the old commit was to add something. | ||||
|  | ||||
| To help with that, use the `--dual-color` mode. In this mode, the diff | ||||
| of diffs will retain the original diff colors, and prefix the lines with | ||||
| -/+ markers that have their *background* red or green, to make it more | ||||
| obvious that they describe how the diff itself changed. | ||||
| To help with that, `range` uses the `--dual-color` mode by default. In | ||||
| this mode, the diff of diffs will retain the original diff colors, and | ||||
| prefix the lines with -/+ markers that have their *background* red or | ||||
| green, to make it more obvious that they describe how the diff itself | ||||
| changed. | ||||
|  | ||||
|  | ||||
| Algorithm | ||||
|  |  | |||
|  | @ -20,11 +20,11 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix) | |||
| { | ||||
| 	int creation_factor = 60; | ||||
| 	struct diff_options diffopt = { NULL }; | ||||
| 	int dual_color = 0; | ||||
| 	int simple_color = -1; | ||||
| 	struct option options[] = { | ||||
| 		OPT_INTEGER(0, "creation-factor", &creation_factor, | ||||
| 			    N_("Percentage by which creation is weighted")), | ||||
| 		OPT_BOOL(0, "dual-color", &dual_color, | ||||
| 		OPT_BOOL(0, "no-dual-color", &simple_color, | ||||
| 			    N_("color both diff and diff-between-diffs")), | ||||
| 		OPT_END() | ||||
| 	}; | ||||
|  | @ -63,7 +63,9 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix) | |||
| 			     options + ARRAY_SIZE(options) - 1, /* OPT_END */ | ||||
| 			     builtin_range_diff_usage, 0); | ||||
|  | ||||
| 	if (dual_color) { | ||||
| 	if (simple_color < 1) { | ||||
| 		if (!simple_color) | ||||
| 			/* force color when --dual-color was used */ | ||||
| 			diffopt.use_color = 1; | ||||
| 		diffopt.flags.dual_color_diffed_diffs = 1; | ||||
| 	} | ||||
|  |  | |||
|  | @ -1981,7 +1981,7 @@ _git_range_diff () | |||
| 	case "$cur" in | ||||
| 	--*) | ||||
| 		__gitcomp " | ||||
| 			--creation-factor= --dual-color | ||||
| 			--creation-factor= --no-dual-color | ||||
| 			$__git_diff_common_options | ||||
| 		" | ||||
| 		return | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Johannes Schindelin
						Johannes Schindelin