Subject: [PATCH v2 0/7] Turn git add-i into built-in

From: "Slavica Đukić via GitGitGadget" <[email-masked]>
Date: Thu, 17 Jan 2019 23:47:01 -0800 (PST)

This is the first version of a patch series to start porting
git-add--interactive from Perl to C. Daniel Ferreira's patch series used as
a head start:
https://public-inbox.org/git/[email-masked]/t/#u

Changes since v1:

 * rename show_help() to add_i_show_help()
 * move static const char help_info[] to add_i_show_help() and translate
   only the help text
 * add newline at the end of add-interactive.h
 * modify commits so that the test is introduced before making
   git-add--interactive.perl's help_cmd to use add_i_show_help
 * use variables GIT_PAGER_IN_USE=true and TERM=vt100 in test as alternative
   for GIT_PRETEND_TTY

Daniel Ferreira (4):
  diff: export diffstat interface
  add--helper: create builtin helper for interactive add
  add-interactive.c: implement status command
  add--interactive.perl: use add--helper --status for status_cmd

Slavica Djukic (3):
  add-interactive.c: implement show-help command
  t3701-add-interactive: test add_i_show_help()
  add--interactive.perl: use add--helper --show-help for help_cmd

 .gitignore                 |   1 +
 Makefile                   |   2 +
 add-interactive.c          | 269 +++++++++++++++++++++++++++++++++++++
 add-interactive.h          |  10 ++
 builtin.h                  |   1 +
 builtin/add--helper.c      |  43 ++++++
 diff.c                     |  36 ++---
 diff.h                     |  18 +++
 git-add--interactive.perl  |  15 +--
 git.c                      |   1 +
 t/t3701-add-interactive.sh |  24 ++++
 11 files changed, 385 insertions(+), 35 deletions(-)
 create mode 100644 add-interactive.c
 create mode 100644 add-interactive.h
 create mode 100644 builtin/add--helper.c

base-commit: b21ebb671bb7dea8d342225f0d66c41f4e54d5ca
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-103%2FslavicaDj%2Fadd-i-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-103/slavicaDj/add-i-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/103

Range-diff vs v1:

 1:  737767b6f4 = 1:  737767b6f4 diff: export diffstat interface
 2:  91b1963125 = 2:  91b1963125 add--helper: create builtin helper for interactive add
 3:  d247ef69fe = 3:  d247ef69fe add-interactive.c: implement status command
 4:  4950c889aa = 4:  4950c889aa add--interactive.perl: use add--helper --status for status_cmd
 5:  19fdea5db1 ! 5:  cf4e913a5a add-interactive.c: implement show-help command
     @@ -16,33 +16,30 @@
       --- a/add-interactive.c
       +++ b/add-interactive.c
      @@
     - 
     - #define HEADER_INDENT "      "
     - 
     -+/* TRANSLATORS: please do not translate the command names
     -+   'status', 'update', 'revert', etc. */
     -+static const char help_info[] = 
     -+		N_("status        - show paths with changes\n"
     -+		"update        - add working tree state to the staged set of changes\n"
     -+		"revert        - revert staged set of changes back to the HEAD version\n"
     -+		"patch         - pick hunks and update selectively\n"
     -+		"diff          - view diff between HEAD and index\n"
     -+		"add untracked - add contents of untracked files to the staged set of changes");
     -+
     - enum collection_phase {
     - 	WORKTREE,
     - 	INDEX
     -@@
       	free(files);
       	hashmap_free(&s.file_map, 1);
       }
      +
     -+void show_help(void)
     ++void add_i_show_help(void)
      +{
      +	const char *help_color = get_color(COLOR_HELP);
     -+	const char *modified_fmt = _("%s");
     ++	color_fprintf(stdout, help_color, "%s%s", _("status"), 
     ++		N_("        - show paths with changes"));
     ++	printf("\n");
     ++	color_fprintf(stdout, help_color, "%s%s", _("update"), 
     ++		N_("        - add working tree state to the staged set of changes"));
     ++	printf("\n");	
     ++	color_fprintf(stdout, help_color, "%s%s", _("revert"),
     ++		N_("        - revert staged set of changes back to the HEAD version"));
      +	printf("\n");
     -+	color_fprintf(stdout, help_color, modified_fmt, _(help_info));
     ++	color_fprintf(stdout, help_color, "%s%s", _("patch"),
     ++		N_("         - pick hunks and update selectively"));
     ++	printf("\n");
     ++	color_fprintf(stdout, help_color, "%s%s", _("diff"),
     ++		N_("          - view diff between HEAD and index"));
     ++	printf("\n");
     ++	color_fprintf(stdout, help_color, "%s%s", _("add untracked"),
     ++		N_(" - add contents of untracked files to the staged set of changes"));
      +	printf("\n");
      +}
      
     @@ -53,10 +50,11 @@
       
       void add_i_print_modified(void);
       
     -+void show_help(void);
     -+
     - #endif
     +-#endif
       \ No newline at end of file
     ++void add_i_show_help(void);
     ++
     ++#endif
      
       diff --git a/builtin/add--helper.c b/builtin/add--helper.c
       --- a/builtin/add--helper.c
     @@ -85,7 +83,7 @@
       	if (mode == STATUS)
       		add_i_print_modified();
      +	else if (mode == HELP)
     -+		show_help();
     ++		add_i_show_help();
       	else
       		usage_with_options(builtin_add_helper_usage,
       				   options);
 6:  86d85face8 < -:  ---------- Git.pm: introduce environment variable GIT_TEST_PRETEND_TTY
 -:  ---------- > 6:  2b4714b8d0 t3701-add-interactive: test add_i_show_help()
 7:  060806010e ! 7:  6ede6d9251 add--interactive.perl: use add--helper --show-help for help_cmd
     @@ -5,11 +5,6 @@
          Change help_cmd sub in git-add--interactive.perl to use
          show-help command from builtin add--helper.
      
     -    Add test to t3701-add-interactive to verify that show-help
     -    outputs expected content. Use GIT_PRETENT_TTY
     -    introduced in earlier commit to be able to test output color
     -    on Windows.
     -
          Signed-off-by: Slavica Djukic <[email-masked]>
      
       diff --git a/git-add--interactive.perl b/git-add--interactive.perl
     @@ -33,37 +28,3 @@
       }
       
       sub process_args {
     -
     - diff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh
     - --- a/t/t3701-add-interactive.sh
     - +++ b/t/t3701-add-interactive.sh
     -@@
     - 	test_cmp expected-2 actual
     - '
     - 
     -+test_expect_success 'show help from add--helper' '
     -+	git reset --hard &&
     -+	cat >expect <<-\EOF &&
     -+
     -+	<BOLD>*** Commands ***<RESET>
     -+	  1: <BOLD;BLUE>s<RESET>tatus	  2: <BOLD;BLUE>u<RESET>pdate	  3: <BOLD;BLUE>r<RESET>evert	  4: <BOLD;BLUE>a<RESET>dd untracked
     -+	  5: <BOLD;BLUE>p<RESET>atch	  6: <BOLD;BLUE>d<RESET>iff	  7: <BOLD;BLUE>q<RESET>uit	  8: <BOLD;BLUE>h<RESET>elp
     -+	<BOLD;BLUE>What now<RESET>> 
     -+	<BOLD;RED>status        - show paths with changes
     -+	update        - add working tree state to the staged set of changes
     -+	revert        - revert staged set of changes back to the HEAD version
     -+	patch         - pick hunks and update selectively
     -+	diff          - view diff between HEAD and index
     -+	add untracked - add contents of untracked files to the staged set of changes<RESET>
     -+	<BOLD>*** Commands ***<RESET>
     -+	  1: <BOLD;BLUE>s<RESET>tatus	  2: <BOLD;BLUE>u<RESET>pdate	  3: <BOLD;BLUE>r<RESET>evert	  4: <BOLD;BLUE>a<RESET>dd untracked
     -+	  5: <BOLD;BLUE>p<RESET>atch	  6: <BOLD;BLUE>d<RESET>iff	  7: <BOLD;BLUE>q<RESET>uit	  8: <BOLD;BLUE>h<RESET>elp
     -+	<BOLD;BLUE>What now<RESET>> 
     -+	Bye.
     -+	EOF
     -+	test_write_lines h | GIT_TEST_PRETEND_TTY=1 git add -i >actual.colored &&
     -+	test_decode_color <actual.colored >actual &&
     -+	test_i18ncmp expect actual
     -+'
     -+
     - test_done

-- 
gitgitgadget