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);
|
||||
|
||||
options->context = strtol(arg, &s, 10);
|
||||
if (*s)
|
||||
return error(_("%s expects a numerical value"), "--unified");
|
||||
if (arg) {
|
||||
options->context = strtol(arg, &s, 10);
|
||||
if (*s)
|
||||
return error(_("%s expects a numerical value"), "--unified");
|
||||
}
|
||||
enable_patch_output(&options->output_format);
|
||||
|
||||
return 0;
|
||||
@ -4895,7 +4897,7 @@ static void prep_parse_options(struct diff_options *options)
|
||||
DIFF_FORMAT_PATCH, DIFF_FORMAT_NO_OUTPUT),
|
||||
OPT_CALLBACK_F('U', "unified", options, N_("<n>"),
|
||||
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,
|
||||
N_("generate diffs with <n> lines context")),
|
||||
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^
|
||||
|
||||
diff --abbrev initial..side
|
||||
diff -U initial..side
|
||||
diff -U1 initial..side
|
||||
diff -r initial..side
|
||||
diff --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