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

[PATCH v4 0/7] Turn git add-i into built-in

From
SGSlavica Đukić via GitGitGadget <gitgitgadget@gmail.com>
Date
Jan 25, 2019, 12:23 UTC
Message-ID
<pull.103.v4.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.103.v3.git.gitgitgadget@gmail.com>

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/1494907234-28903-1-git-send-email-bnmvco@gmail.com/t/#u

Changes since v3:
 * add error check when calling add--helper's functions from
   git-add--interactive.perl
 * replace trailing whitespace in the test with variable $SP used in earlier
   tests
Cc: Phillip Wood phillip.wood@dunelm.org.uk [phillip.wood@dunelm.org.uk]
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          | 263 +++++++++++++++++++++++++++++++++++++
 add-interactive.h          |  10 ++
 builtin.h                  |   1 +
 builtin/add--helper.c      |  43 ++++++
 diff.c                     |  36 ++---
 diff.h                     |  18 +++
 git-add--interactive.perl  |  17 +--
 git.c                      |   1 +
 t/t3701-add-interactive.sh |  24 ++++
 11 files changed, 381 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-v4
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-103/slavicaDj/add-i-v4
Pull-Request: https://github.com/gitgitgadget/git/pull/103
Range-diff vs v3:
 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:  fb3f9378ac add--interactive.perl: use add--helper --status for status_cmd
     @@ -2,12 +2,21 @@
      
          add--interactive.perl: use add--helper --status for status_cmd
      
     -    Call the newly introduced add--helper builtin on
     +    Call the newly introduced add--helper builtin in
          status_cmd() instead of relying on add--interactive's Perl
     -    functions to build print the numstat.
     +    functions to print the numstat.
     +
     +    If an error occurs, it will be reported, but the Perl script will
     +    not exit, since the add--helper is called within an eval block.
     +
     +    As the Perl script will go away soon, so will this scenario, where
     +    the built-in helper is called  from the Perl script. Combined with
     +    the fact that it would be hard to test, we'll pass on adding
     +    a regression test for this.
      
          Signed-off-by: Daniel Ferreira <bnmvco@gmail.com>
          Signed-off-by: Slavica Djukic <slawica92@hotmail.com>
     +    Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
      
       diff --git a/git-add--interactive.perl b/git-add--interactive.perl
       --- a/git-add--interactive.perl
     @@ -19,7 +28,8 @@
      -	list_and_choose({ LIST_ONLY => 1, HEADER => $status_head },
      -			list_modified());
      -	print "\n";
     -+	system(qw(git add--helper --status));
     ++	my @status_cmd = ("git", "add--helper", "--status");
     ++	!system(@status_cmd) or die "@status_cmd exited with code $?";
       }
       
       sub say_n_paths {
 5:  581b108c9c = 5:  ab16afd1d5 add-interactive.c: implement show-help command
 6:  aede733318 ! 6:  0a27304a84 t3701-add-interactive: test add_i_show_help()
     @@ -7,6 +7,7 @@
          Also, add it before changing git-add--interactive.perl's help_cmd
          to demonstrate that there are no changes introduced by the
          conversion to C.
     +
          Prefix git add -i call with GIT_PAGER_IN_USE=true TERM=vt100
          to force colored output on Windows.
      
     @@ -21,7 +22,7 @@
       
      +test_expect_success 'show help from add--helper' '
      +	git reset --hard &&
     -+	cat >expect <<-\EOF &&
     ++	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
     @@ -35,7 +36,7 @@
      +	<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;BLUE>What now<RESET>>$SP
      +	Bye.
      +	EOF
      +	test_write_lines h | GIT_PAGER_IN_USE=true TERM=vt100 git add -i >actual.colored &&
 7:  b9a1a7e37a ! 7:  ca2a7c4375 add--interactive.perl: use add--helper --show-help for help_cmd
     @@ -5,7 +5,15 @@
          Change help_cmd sub in git-add--interactive.perl to use
          show-help command from builtin add--helper.
      
     +    If an error occurs, it will be reported, but the Perl script will
     +    not exit, since the add--helper is called within an eval block.
     +
     +    Just like the change where the Perl script calls the add--helper
     +    to print the numstat, also here we forgo adding a regression test:
     +    the Perl script is on its way out (and this patch is part of that journey).
     +
          Signed-off-by: Slavica Djukic <slawica92@hotmail.com>
     +    Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
      
       diff --git a/git-add--interactive.perl b/git-add--interactive.perl
       --- a/git-add--interactive.perl
     @@ -24,7 +32,8 @@
      -diff          - view diff between HEAD and index
      -add untracked - add contents of untracked files to the staged set of changes
      -EOF
     -+	system(qw(git add--helper --show-help));
     ++	my @help_cmd = ("git", "add--helper", "--show-help");
     ++	!system(@help_cmd) or die "@help_cmd exited with code $?";
       }
       
       sub process_args {
-- 
gitgitgadget
Previous: Daniel Ferreira via GitGitGadgetNext: Daniel Ferreira via GitGitGadget
Message 40 of 76 in “Turn git add-i into built-in”
  1. 0/7 Turn git add-i into built-inJohannes Schindelin, Dec 20, 2018
  2. 1/7 diff: export diffstat interfaceDaniel Ferreira via GitGitGadget, Dec 20, 2018
  3. 2/7 add--helper: create builtin helper for interactive addDaniel Ferreira via GitGitGadget, Dec 20, 2018
  4. 4/7 add--interactive.perl: use add--helper --status for status_cmdDaniel Ferreira via GitGitGadget, Dec 20, 2018
  5. 3/7 add-interactive.c: implement status commandDaniel Ferreira via GitGitGadget, Dec 20, 2018
  6. 5/7 add-interactive.c: implement show-help commandSlavica Djukic via GitGitGadget, Dec 20, 2018
  7. Phillip WoodJan 14, 2019
  8. 6/7 Git.pm: introduce environment variable GIT_TEST_PRETEND_TTYSlavica Djukic via GitGitGadget, Dec 20, 2018
  9. Phillip WoodJan 14, 2019
  10. Slavica DjukicJan 15, 2019
  11. Johannes SchindelinJan 15, 2019
  12. Phillip WoodJan 15, 2019
  13. 7/7 add--interactive.perl: use add--helper --show-help for help_cmdSlavica Djukic via GitGitGadget, Dec 20, 2018
  14. Phillip WoodJan 14, 2019
  15. Johannes SchindelinDec 20, 2018
  16. Slavica DjukicJan 11, 2019
  17. 0/7 Turn git add-i into built-inSlavica Đukić via GitGitGadget, Jan 18, 2019
  18. 1/7 diff: export diffstat interfaceDaniel Ferreira via GitGitGadget, Jan 18, 2019
  19. 2/7 add--helper: create builtin helper for interactive addDaniel Ferreira via GitGitGadget, Jan 18, 2019
  20. 4/7 add--interactive.perl: use add--helper --status for status_cmdDaniel Ferreira via GitGitGadget, Jan 18, 2019
  21. 5/7 add-interactive.c: implement show-help commandSlavica Djukic via GitGitGadget, Jan 18, 2019
  22. Phillip WoodJan 18, 2019
  23. Slavica DjukicJan 18, 2019
  24. 3/7 add-interactive.c: implement status commandDaniel Ferreira via GitGitGadget, Jan 18, 2019
  25. 7/7 add--interactive.perl: use add--helper --show-help for help_cmdSlavica Djukic via GitGitGadget, Jan 18, 2019
  26. 6/7 t3701-add-interactive: test add_i_show_help()Slavica Djukic via GitGitGadget, Jan 18, 2019
  27. Phillip WoodJan 18, 2019
  28. 0/7 Turn git add-i into built-inSlavica Đukić via GitGitGadget, Jan 21, 2019
  29. 1/7 diff: export diffstat interfaceDaniel Ferreira via GitGitGadget, Jan 21, 2019
  30. 2/7 add--helper: create builtin helper for interactive addDaniel Ferreira via GitGitGadget, Jan 21, 2019
  31. 4/7 add--interactive.perl: use add--helper --status for status_cmdDaniel Ferreira via GitGitGadget, Jan 21, 2019
  32. 5/7 add-interactive.c: implement show-help commandSlavica Djukic via GitGitGadget, Jan 21, 2019
  33. 6/7 t3701-add-interactive: test add_i_show_help()Slavica Djukic via GitGitGadget, Jan 21, 2019
  34. Phillip WoodJan 25, 2019
  35. Slavica DjukicJan 25, 2019
  36. 7/7 add--interactive.perl: use add--helper --show-help for help_cmdSlavica Djukic via GitGitGadget, Jan 21, 2019
  37. Ævar Arnfjörð BjarmasonJan 21, 2019
  38. Slavica DjukicJan 21, 2019
  39. 3/7 add-interactive.c: implement status commandDaniel Ferreira via GitGitGadget, Jan 21, 2019
  40. 0/7 Turn git add-i into built-inSlavica Đukić via GitGitGadget, Jan 25, 2019
  41. 1/7 diff: export diffstat interfaceDaniel Ferreira via GitGitGadget, Jan 25, 2019
  42. 2/7 add--helper: create builtin helper for interactive addDaniel Ferreira via GitGitGadget, Jan 25, 2019
  43. 3/7 add-interactive.c: implement status commandDaniel Ferreira via GitGitGadget, Jan 25, 2019
  44. 6/7 t3701-add-interactive: test add_i_show_help()Slavica Djukic via GitGitGadget, Jan 25, 2019
  45. 5/7 add-interactive.c: implement show-help commandSlavica Djukic via GitGitGadget, Jan 25, 2019
  46. 4/7 add--interactive.perl: use add--helper --status for status_cmdDaniel Ferreira via GitGitGadget, Jan 25, 2019
  47. 7/7 add--interactive.perl: use add--helper --show-help for help_cmdSlavica Djukic via GitGitGadget, Jan 25, 2019
  48. Slavica DjukicJan 25, 2019
  49. Phillip WoodFeb 1, 2019
  50. 00/10 Turn git add-i into built-inSlavica Đukić via GitGitGadget, Feb 20, 2019
  51. 01/10 diff: export diffstat interfaceDaniel Ferreira via GitGitGadget, Feb 20, 2019
  52. Junio C HamanoFeb 21, 2019
  53. Slavica DjukicFeb 22, 2019
  54. 02/10 add--helper: create builtin helper for interactive addDaniel Ferreira via GitGitGadget, Feb 20, 2019
  55. Junio C HamanoFeb 21, 2019
  56. Johannes SchindelinMar 8, 2019
  57. 08/10 add-interactive.c: implement show-help commandSlavica Djukic via GitGitGadget, Feb 20, 2019
  58. 10/10 add--interactive.perl: use add--helper --show-help for help_cmdSlavica Djukic via GitGitGadget, Feb 20, 2019
  59. 09/10 t3701-add-interactive: test add_i_show_help()Slavica Djukic via GitGitGadget, Feb 20, 2019
  60. 06/10 add--interactive.perl: use add--helper --status for status_cmdDaniel Ferreira via GitGitGadget, Feb 20, 2019
  61. 04/10 add-interactive.c: implement list_and_chooseSlavica Djukic via GitGitGadget, Feb 20, 2019
  62. Junio C HamanoFeb 22, 2019
  63. Slavica DjukicMar 1, 2019
  64. 07/10 add-interactive.c: add support for list_only optionSlavica Djukic via GitGitGadget, Feb 20, 2019
  65. 05/10 add-interactive.c: implement status commandSlavica Djukic via GitGitGadget, Feb 20, 2019
  66. Junio C HamanoFeb 22, 2019
  67. Slavica DjukicMar 1, 2019
  68. 03/10 add-interactive.c: implement list_modifiedSlavica Djukic via GitGitGadget, Feb 20, 2019
  69. Junio C HamanoFeb 21, 2019
  70. Junio C HamanoFeb 21, 2019
  71. Slavica DjukicFeb 22, 2019
  72. Slavica DjukicFeb 22, 2019
  73. Junio C HamanoFeb 22, 2019
  74. End of Outreachy internshipSlavica Djukic, Mar 4, 2019
  75. Phillip WoodJan 18, 2019
  76. Johannes SchindelinJan 18, 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.