Skip to content

built-in add -p: add support for the same config settings as the Perl version

Johannes Schindelin via GitGitGadget git 4 versions – New

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v4 Latest10 patches 0 repliesNew
  2. v310 patches 7 repliesSuperseded
  3. v29 patches 5 repliesSuperseded
Earlier versions · 1
VersionPostedPatchesRepliesStatus
v19 patches9 repliesSuperseded

Changes in v4 from the cover letter

* Reverted that heavy-handed SIGPIPE handling.
* Instead, changed the diffFilter test case to process the standard input instead of ignoring it.

Patches in v4 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/10t3701: adjust difffilter testt/t3701-add-interactive.sh+1 -10 replies
2/10built-in add -p: support interactive.diffFilteradd-interactive.c add-interactive.h add-patch.c+48 -00 replies
3/10built-in add -p: handle diff.algorithmadd-interactive.c add-interactive.h add-patch.c+9 -10 replies
4/10terminal: make the code of disable_echo() reusablecompat/terminal.c+15 -40 replies
5/10terminal: accommodate Git for Windows' default terminalcompat/terminal.c+50 -00 replies
6/10terminal: add a new function to read a single keystrokecompat/terminal.c compat/terminal.h+58 -00 replies
7/10built-in add -p: respect the `interactive.singlekey` config settingadd-interactive.c add-interactive.h add-patch.c+20 -40 replies
8/10built-in add -p: handle Escape sequences in interactive.singlekey modecompat/terminal.c+55 -10 replies
9/10built-in add -p: handle Escape sequences more efficientlycompat/terminal.c+72 -10 replies
10/10ci: include the built-in `git add -i` in the `linux-gcc` jobci/run-build-and-tests.sh+1 -00 replies

Reviews trailers per patch

None of the 10 patches has a Reviewed-by or Acked-by.

PatchSZEDER GáborJeff King
1/10Helped-by Helped-by
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v4 thread

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

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 v3:

* Reverted that heavy-handed SIGPIPE handling.
* Instead, changed the diffFilter test case to process the standard input instead of ignoring it.

(The range diff between v2 and v4 actually only shows the new patch 1/10 "t3701: adjust difffilter test".)

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):
t3701: adjust difffilter test
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          |  19 +++
 add-interactive.h          |   4 +
 add-patch.c                |  57 ++++++++-
 ci/run-build-and-tests.sh  |   1 +
 compat/terminal.c          | 249 ++++++++++++++++++++++++++++++++++++-
 compat/terminal.h          |   3 +
 t/t3701-add-interactive.sh |   2 +-
 7 files changed, 326 insertions(+), 9 deletions(-)

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

Range-diff vs v3:

  1:  5e258a8d2b <  -:  ---------- built-in add -i/-p: treat SIGPIPE as EOF
  -:  ---------- >  1:  e12df77e8a t3701: adjust difffilter test
  2:  2a5951ecfe !  2:  413a87bd79 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,14 +123,13 @@
       		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;
       }
  3:  a2bce01818 =  3:  062c624547 built-in add -p: handle diff.algorithm
  4:  be40a37c0c =  4:  09a8946303 terminal: make the code of disable_echo() reusable
  5:  233f23791c =  5:  a81304cb76 terminal: accommodate Git for Windows' default terminal
  6:  74593b5115 =  6:  8d9c703f3b terminal: add a new function to read a single keystroke
  7:  197fe1e14a !  7:  8ed4487ae4 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 {
  8:  9ab381d539 =  8:  cdc609f8fa built-in add -p: handle Escape sequences in interactive.singlekey mode
  9:  bdb6268b8b =  9:  80b0f2528d built-in add -p: handle Escape sequences more efficiently
 10:  c4195969a6 = 10:  7ab7ec62d0 ci: include the built-in `git add -i` in the `linux-gcc` job
Signature · 1 line
gitgitgadget