mirror of
https://github.com/git/git
synced 2024-07-05 00:58:49 +00:00
diff-parseopt: restore -U (no argument) behavior
Before d473e2e0e8
(diff.c: convert -U|--unified, 2019-01-27), -U and
--unified are implemented with a custom parser opt_arg() in diff.c. I
didn't check this code carefully and not realize that it's the
equivalent of PARSE_OPT_NONEG | PARSE_OPT_OPTARG.
In other words, if -U is specified without any argument, the option
should be accepted, and the default value should be used. Without
PARSE_OPT_OPTARG, parse_options() will reject this case and cause a
regression.
Reported-by: Bryan Turner <bturner@atlassian.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
7f125ff909
commit
8ef05193bc
10
diff.c
10
diff.c
|
@ -4875,9 +4875,11 @@ static int diff_opt_unified(const struct option *opt,
|
||||||
|
|
||||||
BUG_ON_OPT_NEG(unset);
|
BUG_ON_OPT_NEG(unset);
|
||||||
|
|
||||||
options->context = strtol(arg, &s, 10);
|
if (arg) {
|
||||||
if (*s)
|
options->context = strtol(arg, &s, 10);
|
||||||
return error(_("%s expects a numerical value"), "--unified");
|
if (*s)
|
||||||
|
return error(_("%s expects a numerical value"), "--unified");
|
||||||
|
}
|
||||||
enable_patch_output(&options->output_format);
|
enable_patch_output(&options->output_format);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -4895,7 +4897,7 @@ static void prep_parse_options(struct diff_options *options)
|
||||||
DIFF_FORMAT_PATCH, DIFF_FORMAT_NO_OUTPUT),
|
DIFF_FORMAT_PATCH, DIFF_FORMAT_NO_OUTPUT),
|
||||||
OPT_CALLBACK_F('U', "unified", options, N_("<n>"),
|
OPT_CALLBACK_F('U', "unified", options, N_("<n>"),
|
||||||
N_("generate diffs with <n> lines context"),
|
N_("generate diffs with <n> lines context"),
|
||||||
PARSE_OPT_NONEG, diff_opt_unified),
|
PARSE_OPT_NONEG | PARSE_OPT_OPTARG, diff_opt_unified),
|
||||||
OPT_BOOL('W', "function-context", &options->flags.funccontext,
|
OPT_BOOL('W', "function-context", &options->flags.funccontext,
|
||||||
N_("generate diffs with <n> lines context")),
|
N_("generate diffs with <n> lines context")),
|
||||||
OPT_BIT_F(0, "raw", &options->output_format,
|
OPT_BIT_F(0, "raw", &options->output_format,
|
||||||
|
|
|
@ -330,6 +330,8 @@ format-patch --inline --stdout initial..master^^
|
||||||
format-patch --stdout --cover-letter -n initial..master^
|
format-patch --stdout --cover-letter -n initial..master^
|
||||||
|
|
||||||
diff --abbrev initial..side
|
diff --abbrev initial..side
|
||||||
|
diff -U initial..side
|
||||||
|
diff -U1 initial..side
|
||||||
diff -r initial..side
|
diff -r initial..side
|
||||||
diff --stat initial..side
|
diff --stat initial..side
|
||||||
diff -r --stat initial..side
|
diff -r --stat initial..side
|
||||||
|
|
29
t/t4013/diff.diff_-U1_initial..side
Normal file
29
t/t4013/diff.diff_-U1_initial..side
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
$ git diff -U1 initial..side
|
||||||
|
diff --git a/dir/sub b/dir/sub
|
||||||
|
index 35d242b..7289e35 100644
|
||||||
|
--- a/dir/sub
|
||||||
|
+++ b/dir/sub
|
||||||
|
@@ -2 +2,3 @@ A
|
||||||
|
B
|
||||||
|
+1
|
||||||
|
+2
|
||||||
|
diff --git a/file0 b/file0
|
||||||
|
index 01e79c3..f4615da 100644
|
||||||
|
--- a/file0
|
||||||
|
+++ b/file0
|
||||||
|
@@ -3 +3,4 @@
|
||||||
|
3
|
||||||
|
+A
|
||||||
|
+B
|
||||||
|
+C
|
||||||
|
diff --git a/file3 b/file3
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7289e35
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/file3
|
||||||
|
@@ -0,0 +1,4 @@
|
||||||
|
+A
|
||||||
|
+B
|
||||||
|
+1
|
||||||
|
+2
|
||||||
|
$
|
31
t/t4013/diff.diff_-U2_initial..side
Normal file
31
t/t4013/diff.diff_-U2_initial..side
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
$ git diff -U2 initial..side
|
||||||
|
diff --git a/dir/sub b/dir/sub
|
||||||
|
index 35d242b..7289e35 100644
|
||||||
|
--- a/dir/sub
|
||||||
|
+++ b/dir/sub
|
||||||
|
@@ -1,2 +1,4 @@
|
||||||
|
A
|
||||||
|
B
|
||||||
|
+1
|
||||||
|
+2
|
||||||
|
diff --git a/file0 b/file0
|
||||||
|
index 01e79c3..f4615da 100644
|
||||||
|
--- a/file0
|
||||||
|
+++ b/file0
|
||||||
|
@@ -2,2 +2,5 @@
|
||||||
|
2
|
||||||
|
3
|
||||||
|
+A
|
||||||
|
+B
|
||||||
|
+C
|
||||||
|
diff --git a/file3 b/file3
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7289e35
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/file3
|
||||||
|
@@ -0,0 +1,4 @@
|
||||||
|
+A
|
||||||
|
+B
|
||||||
|
+1
|
||||||
|
+2
|
||||||
|
$
|
32
t/t4013/diff.diff_-U_initial..side
Normal file
32
t/t4013/diff.diff_-U_initial..side
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
$ git diff -U initial..side
|
||||||
|
diff --git a/dir/sub b/dir/sub
|
||||||
|
index 35d242b..7289e35 100644
|
||||||
|
--- a/dir/sub
|
||||||
|
+++ b/dir/sub
|
||||||
|
@@ -1,2 +1,4 @@
|
||||||
|
A
|
||||||
|
B
|
||||||
|
+1
|
||||||
|
+2
|
||||||
|
diff --git a/file0 b/file0
|
||||||
|
index 01e79c3..f4615da 100644
|
||||||
|
--- a/file0
|
||||||
|
+++ b/file0
|
||||||
|
@@ -1,3 +1,6 @@
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
+A
|
||||||
|
+B
|
||||||
|
+C
|
||||||
|
diff --git a/file3 b/file3
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..7289e35
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/file3
|
||||||
|
@@ -0,0 +1,4 @@
|
||||||
|
+A
|
||||||
|
+B
|
||||||
|
+1
|
||||||
|
+2
|
||||||
|
$
|
Loading…
Reference in New Issue
Block a user