git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 20/20] am: avoid diff_opt_parse()

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Mar 20, 2019, 11:47 UTC
Message-ID
<20190320114703.18659-21-pclouds@gmail.com>
In-Reply-To
<20190320114703.18659-1-pclouds@gmail.com>

diff_opt_parse() is a heavy hammer to just set diff filter. But it's the only way because of the diff_status_letters[] mapping. Add a new API to set diff filter and use it in git-am. diff_opt_parse()'s only remaining call site in revision.c will be gone soon and having it here just because of git-am does not make sense.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 builtin/am.c | 4 ++--
 diff.c       | 6 ++++++
 diff.h       | 2 ++
 3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/builtin/am.c b/builtin/am.c
index 95370313b6..0cbf285459 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -1515,11 +1515,11 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa
 		 * review them with extra care to spot mismerges.
 		 */
 		struct rev_info rev_info;
-		const char *diff_filter_str = "--diff-filter=AM";
 
 		repo_init_revisions(the_repository, &rev_info, NULL);
 		rev_info.diffopt.output_format = DIFF_FORMAT_NAME_STATUS;
-		diff_opt_parse(&rev_info.diffopt, &diff_filter_str, 1, rev_info.prefix);
+		rev_info.diffopt.filter |= diff_filter_bit('A');
+		rev_info.diffopt.filter |= diff_filter_bit('M');
 		add_pending_oid(&rev_info, "HEAD", &our_tree, 0);
 		diff_setup_done(&rev_info.diffopt);
 		run_diff_index(&rev_info, 1);
diff --git a/diff.c b/diff.c
index 6ce59d0621..b94befd494 100644
--- a/diff.c
+++ b/diff.c
@@ -4692,6 +4692,12 @@ static unsigned filter_bit_tst(char status, const struct diff_options *opt)
 	return opt->filter & filter_bit[(int) status];
 }
 
+unsigned diff_filter_bit(char status)
+{
+	prepare_filter_bits();
+	return filter_bit[(int) status];
+}
+
 static int diff_opt_diff_filter(const struct option *option,
 				const char *optarg, int unset)
 {
diff --git a/diff.h b/diff.h
index 03c6afda22..f88482705c 100644
--- a/diff.h
+++ b/diff.h
@@ -233,6 +233,8 @@ struct diff_options {
 	struct option *parseopts;
 };
 
+unsigned diff_filter_bit(char status);
+
 void diff_emit_submodule_del(struct diff_options *o, const char *line);
 void diff_emit_submodule_add(struct diff_options *o, const char *line);
 void diff_emit_submodule_untracked(struct diff_options *o, const char *path);
-- 
2.21.0.548.gd3c7d92dc2
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 26 of 52 in “nd/diff-parseopt the last part”
  1. 00/20 nd/diff-parseopt the last partNguyễn Thái Ngọc Duy, Mar 20, 2019
  2. 01/20 diff-parseopt: convert --ws-error-highlightNguyễn Thái Ngọc Duy, Mar 20, 2019
  3. Martin ÅgrenMar 20, 2019
  4. 02/20 diff-parseopt: convert --ita-[in]visible-in-indexNguyễn Thái Ngọc Duy, Mar 20, 2019
  5. 03/20 diff-parseopt: convert -zNguyễn Thái Ngọc Duy, Mar 20, 2019
  6. 04/20 diff-parseopt: convert -lNguyễn Thái Ngọc Duy, Mar 20, 2019
  7. 05/20 diff-parseopt: convert -S|-GNguyễn Thái Ngọc Duy, Mar 20, 2019
  8. 06/20 diff-parseopt: convert --pickaxe-all|--pickaxe-regexNguyễn Thái Ngọc Duy, Mar 20, 2019
  9. 07/20 diff-parseopt: convert -ONguyễn Thái Ngọc Duy, Mar 20, 2019
  10. Martin ÅgrenMar 20, 2019
  11. 08/20 diff-parseopt: convert --find-objectNguyễn Thái Ngọc Duy, Mar 20, 2019
  12. 09/20 diff-parseopt: convert --diff-filterNguyễn Thái Ngọc Duy, Mar 20, 2019
  13. 10/20 diff-parseopt: convert --[no-]abbrevNguyễn Thái Ngọc Duy, Mar 20, 2019
  14. Ævar Arnfjörð BjarmasonMar 20, 2019
  15. Duy NguyenMar 21, 2019
  16. 11/20 diff-parseopt: convert --[src|dst]-prefixNguyễn Thái Ngọc Duy, Mar 20, 2019
  17. 12/20 diff-parseopt: convert --line-prefixNguyễn Thái Ngọc Duy, Mar 20, 2019
  18. 13/20 diff-parseopt: convert --no-prefixNguyễn Thái Ngọc Duy, Mar 20, 2019
  19. Martin ÅgrenMar 20, 2019
  20. 14/20 diff-parseopt: convert --inter-hunk-contextNguyễn Thái Ngọc Duy, Mar 20, 2019
  21. 15/20 diff-parseopt: convert --[no-]color-movedNguyễn Thái Ngọc Duy, Mar 20, 2019
  22. 16/20 diff-parseopt: convert --color-moved-wsNguyễn Thái Ngọc Duy, Mar 20, 2019
  23. 17/20 diff.c: allow --no-color-moved-wsNguyễn Thái Ngọc Duy, Mar 20, 2019
  24. 18/20 range-diff: use parse_options() instead of diff_opt_parse()Nguyễn Thái Ngọc Duy, Mar 20, 2019
  25. 19/20 diff --no-index: use parse_options() instead of diff_opt_parse()Nguyễn Thái Ngọc Duy, Mar 20, 2019
  26. 20/20 am: avoid diff_opt_parse()Nguyễn Thái Ngọc Duy, Mar 20, 2019
  27. 00/20 nd/diff-parseopt the last partNguyễn Thái Ngọc Duy, Mar 24, 2019
  28. 01/20 diff-parseopt: convert --ws-error-highlightNguyễn Thái Ngọc Duy, Mar 24, 2019
  29. 02/20 diff-parseopt: convert --ita-[in]visible-in-indexNguyễn Thái Ngọc Duy, Mar 24, 2019
  30. 03/20 diff-parseopt: convert -zNguyễn Thái Ngọc Duy, Mar 24, 2019
  31. 04/20 diff-parseopt: convert -lNguyễn Thái Ngọc Duy, Mar 24, 2019
  32. 05/20 diff-parseopt: convert -S|-GNguyễn Thái Ngọc Duy, Mar 24, 2019
  33. 06/20 diff-parseopt: convert --pickaxe-all|--pickaxe-regexNguyễn Thái Ngọc Duy, Mar 24, 2019
  34. 07/20 diff-parseopt: convert -ONguyễn Thái Ngọc Duy, Mar 24, 2019
  35. 08/20 diff-parseopt: convert --find-objectNguyễn Thái Ngọc Duy, Mar 24, 2019
  36. 09/20 diff-parseopt: convert --diff-filterNguyễn Thái Ngọc Duy, Mar 24, 2019
  37. 10/20 diff-parseopt: convert --[no-]abbrevNguyễn Thái Ngọc Duy, Mar 24, 2019
  38. 11/20 diff-parseopt: convert --[src|dst]-prefixNguyễn Thái Ngọc Duy, Mar 24, 2019
  39. 12/20 diff-parseopt: convert --line-prefixNguyễn Thái Ngọc Duy, Mar 24, 2019
  40. 13/20 diff-parseopt: convert --no-prefixNguyễn Thái Ngọc Duy, Mar 24, 2019
  41. 14/20 diff-parseopt: convert --inter-hunk-contextNguyễn Thái Ngọc Duy, Mar 24, 2019
  42. 15/20 diff-parseopt: convert --[no-]color-movedNguyễn Thái Ngọc Duy, Mar 24, 2019
  43. 16/20 diff-parseopt: convert --color-moved-wsNguyễn Thái Ngọc Duy, Mar 24, 2019
  44. 17/20 diff.c: allow --no-color-moved-wsNguyễn Thái Ngọc Duy, Mar 24, 2019
  45. 18/20 range-diff: use parse_options() instead of diff_opt_parse()Nguyễn Thái Ngọc Duy, Mar 24, 2019
  46. 19/20 diff --no-index: use parse_options() instead of diff_opt_parse()Nguyễn Thái Ngọc Duy, Mar 24, 2019
  47. Johannes SchindelinApr 30, 2019
  48. Duy NguyenApr 30, 2019
  49. Johannes SchindelinApr 30, 2019
  50. Duy NguyenMay 1, 2019
  51. Jeff KingMay 1, 2019
  52. 20/20 am: avoid diff_opt_parse()Nguyễn Thái Ngọc Duy, Mar 24, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.