Subject: [PATCH v2 0/3] fix diff-parseopt regressions

From: Nguyễn Thái Ngọc Duy <[email-masked]>
Date: Wed, 29 May 2019 16:11:13 +0700

v2 reduces diff noise. My C is rusty (and probably holey too). For some
reason I remember "unsigned" is equivalent to "unsigned short", not
"unsigned int".

Nguyễn Thái Ngọc Duy (3):
  diff-parseopt: correct variable types that are used by parseopt
  diff-parseopt: restore -U (no argument) behavior
  parse-options: check empty value in OPT_INTEGER and OPT_ABBREV

 diff.c                                    | 10 ++++---
 diff.h                                    |  2 +-
 parse-options-cb.c                        |  3 +++
 parse-options.c                           |  3 +++
 t/t4013-diff-various.sh                   |  2 ++
 t/t4013/diff.diff_-U1_initial..side (new) | 29 ++++++++++++++++++++
 t/t4013/diff.diff_-U2_initial..side (new) | 31 ++++++++++++++++++++++
 t/t4013/diff.diff_-U_initial..side (new)  | 32 +++++++++++++++++++++++
 8 files changed, 107 insertions(+), 5 deletions(-)
 create mode 100644 t/t4013/diff.diff_-U1_initial..side
 create mode 100644 t/t4013/diff.diff_-U2_initial..side
 create mode 100644 t/t4013/diff.diff_-U_initial..side

Interdiff dựa trên v1:
diff --git a/diff.h b/diff.h
index 4527daf6b7..d5e44baa96 100644
--- a/diff.h
+++ b/diff.h
@@ -65,39 +65,39 @@ typedef struct strbuf *(*diff_prefix_fn_t)(struct diff_options *opt, void *data)
 
 #define DIFF_FLAGS_INIT { 0 }
 struct diff_flags {
-	unsigned int recursive;
-	unsigned int tree_in_recursive;
-	unsigned int binary;
-	unsigned int text;
-	unsigned int full_index;
-	unsigned int silent_on_remove;
-	unsigned int find_copies_harder;
-	unsigned int follow_renames;
-	unsigned int rename_empty;
-	unsigned int has_changes;
-	unsigned int quick;
-	unsigned int no_index;
-	unsigned int allow_external;
-	unsigned int exit_with_status;
-	unsigned int reverse_diff;
-	unsigned int check_failed;
-	unsigned int relative_name;
-	unsigned int ignore_submodules;
-	unsigned int dirstat_cumulative;
-	unsigned int dirstat_by_file;
-	unsigned int allow_textconv;
-	unsigned int textconv_set_via_cmdline;
-	unsigned int diff_from_contents;
-	unsigned int dirty_submodules;
-	unsigned int ignore_untracked_in_submodules;
-	unsigned int ignore_dirty_submodules;
-	unsigned int override_submodule_config;
-	unsigned int dirstat_by_line;
-	unsigned int funccontext;
-	unsigned int default_follow_renames;
-	unsigned int stat_with_summary;
-	unsigned int suppress_diff_headers;
-	unsigned int dual_color_diffed_diffs;
+	unsigned recursive;
+	unsigned tree_in_recursive;
+	unsigned binary;
+	unsigned text;
+	unsigned full_index;
+	unsigned silent_on_remove;
+	unsigned find_copies_harder;
+	unsigned follow_renames;
+	unsigned rename_empty;
+	unsigned has_changes;
+	unsigned quick;
+	unsigned no_index;
+	unsigned allow_external;
+	unsigned exit_with_status;
+	unsigned reverse_diff;
+	unsigned check_failed;
+	unsigned relative_name;
+	unsigned ignore_submodules;
+	unsigned dirstat_cumulative;
+	unsigned dirstat_by_file;
+	unsigned allow_textconv;
+	unsigned textconv_set_via_cmdline;
+	unsigned diff_from_contents;
+	unsigned dirty_submodules;
+	unsigned ignore_untracked_in_submodules;
+	unsigned ignore_dirty_submodules;
+	unsigned override_submodule_config;
+	unsigned dirstat_by_line;
+	unsigned funccontext;
+	unsigned default_follow_renames;
+	unsigned stat_with_summary;
+	unsigned suppress_diff_headers;
+	unsigned dual_color_diffed_diffs;
 };
 
 static inline void diff_flags_or(struct diff_flags *a,
@@ -151,7 +151,7 @@ struct diff_options {
 	int skip_stat_unmatch;
 	int line_termination;
 	int output_format;
-	unsigned int pickaxe_opts;
+	unsigned pickaxe_opts;
 	int rename_score;
 	int rename_limit;
 	int needed_rename_limit;
-- 
2.22.0.rc0.322.g2b0371e29a