Subject: [PATCH v3 00/10] built-in add -p: add support for the same config settings as the Perl version

From: "Johannes Schindelin via GitGitGadget" <[email-masked]>
Date: Mon, 13 Jan 2020 08:29:21 +0000

This is the final leg of the journey to a fully built-in git add: the git
add -i and git add -p modes were re-implemented in C, but they lacked
support for a couple of config settings.

The one that sticks out most is the interactive.singleKey setting: it was
particularly hard to get to work, especially on Windows.

It also seems to be the setting that is incomplete already in the Perl
version of the interactive add command: while the name of the config setting
suggests that it applies to all of the interactive add, including the main
loop of git add --interactive and to the file selections in that command, it
does not. Only the git add --patch mode respects that setting.

As it is outside the purpose of the conversion of git-add--interactive.perl 
to C, we will leave that loose end for some future date.

Changes since v2:

 * Fixed the SIGPIPE issue pointed out by Gábor Szeder.

Changes since v1:

 * Fixed the commit message where a copy/paste fail made it talk about
   another GIT_TEST_* variable than the GIT_TEST_ADD_I_USE_BUILTIN one.

Johannes Schindelin (10):
  built-in add -i/-p: treat SIGPIPE as EOF
  built-in add -p: support interactive.diffFilter
  built-in add -p: handle diff.algorithm
  terminal: make the code of disable_echo() reusable
  terminal: accommodate Git for Windows' default terminal
  terminal: add a new function to read a single keystroke
  built-in add -p: respect the `interactive.singlekey` config setting
  built-in add -p: handle Escape sequences in interactive.singlekey mode
  built-in add -p: handle Escape sequences more efficiently
  ci: include the built-in `git add -i` in the `linux-gcc` job

 add-interactive.c         |  22 ++++
 add-interactive.h         |   4 +
 add-patch.c               |  61 +++++++++-
 ci/run-build-and-tests.sh |   1 +
 compat/terminal.c         | 249 +++++++++++++++++++++++++++++++++++++-
 compat/terminal.h         |   3 +
 6 files changed, 332 insertions(+), 8 deletions(-)

base-commit: c480eeb574e649a19f27dc09a994e45f9b2c2622
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-175%2Fdscho%2Fadd-p-in-c-config-settings-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-175/dscho/add-p-in-c-config-settings-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/175

Range-diff vs v2:

  -:  ---------- >  1:  5e258a8d2b built-in add -i/-p: treat SIGPIPE as EOF
  1:  f45ff08bd0 !  2:  2a5951ecfe built-in add -p: support interactive.diffFilter
     @@ -35,9 +35,9 @@
       	strbuf_release(&header);
       	prefix_item_list_clear(&commands);
      +	clear_add_i_state(&s);
     + 	sigchain_pop(SIGPIPE);
       
       	return res;
     - }
      
       diff --git a/add-interactive.h b/add-interactive.h
       --- a/add-interactive.h
     @@ -123,13 +123,14 @@
       		strbuf_release(&s.plain);
       		strbuf_release(&s.colored);
      +		clear_add_i_state(&s.s);
     + 		sigchain_pop(SIGPIPE);
       		return -1;
       	}
     - 
      @@
       	strbuf_release(&s.buf);
       	strbuf_release(&s.plain);
       	strbuf_release(&s.colored);
      +	clear_add_i_state(&s.s);
     + 	sigchain_pop(SIGPIPE);
       	return 0;
       }
  2:  e9c4a13cbf =  3:  a2bce01818 built-in add -p: handle diff.algorithm
  3:  e643554dba =  4:  be40a37c0c terminal: make the code of disable_echo() reusable
  4:  bd2306c5d5 =  5:  233f23791c terminal: accommodate Git for Windows' default terminal
  5:  190fb4f5e9 =  6:  74593b5115 terminal: add a new function to read a single keystroke
  6:  167dfa37dd !  7:  197fe1e14a built-in add -p: respect the `interactive.singlekey` config setting
     @@ -48,9 +48,9 @@
       --- a/add-patch.c
       +++ b/add-patch.c
      @@
     - #include "pathspec.h"
       #include "color.h"
       #include "diff.h"
     + #include "sigchain.h"
      +#include "compat/terminal.h"
       
       enum prompt_mode_type {
  7:  32067bebe8 =  8:  9ab381d539 built-in add -p: handle Escape sequences in interactive.singlekey mode
  8:  703719ffce =  9:  bdb6268b8b built-in add -p: handle Escape sequences more efficiently
  9:  23a3a47b01 = 10:  c4195969a6 ci: include the built-in `git add -i` in the `linux-gcc` job

-- 
gitgitgadget