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

[PATCH v3 0/6] Add --pathspec-from-file option for reset, commit

From
AGAlexandr Miloslavskiy via GitGitGadget <gitgitgadget@gmail.com>
Date
Nov 19, 2019, 16:48 UTC
Message-ID
<pull.445.v3.git.1574182135.gitgitgadget@gmail.com>
In-Reply-To
<pull.445.v2.git.1573055478.gitgitgadget@gmail.com>
Changes from V2:
1) Some polishing in documentation 2) = NULL removed from 
parse_pathspec_file()
Alexandr Miloslavskiy (6):
  parse-options.h: add new options `--pathspec-from-file`,
    `--pathspec-file-nul`
  pathspec: add new function to parse file
  doc: reset: synchronize <pathspec> description
  reset: support the `--pathspec-from-file` option
  doc: commit: synchronize <pathspec> description
  commit: support the --pathspec-from-file option
 Documentation/git-commit.txt    |  29 ++++--
 Documentation/git-reset.txt     |  48 +++++++---
 builtin/commit.c                |  25 +++++-
 builtin/reset.c                 |  25 +++++-
 parse-options.h                 |   2 +
 pathspec.c                      |  38 ++++++++
 pathspec.h                      |  10 +++
 t/t7107-reset-pathspec-file.sh  | 155 ++++++++++++++++++++++++++++++++
 t/t7526-commit-pathspec-file.sh | 130 +++++++++++++++++++++++++++
 9 files changed, 434 insertions(+), 28 deletions(-)
 create mode 100755 t/t7107-reset-pathspec-file.sh
 create mode 100755 t/t7526-commit-pathspec-file.sh
base-commit: da72936f544fec5a335e66432610e4cef4430991
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-445%2FSyntevoAlex%2F%230207_pathspec_from_file-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-445/SyntevoAlex/#0207_pathspec_from_file-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/445
Range-diff vs v2:
 1:  2dfaccf0d5 = 1:  19b80326ea parse-options.h: add new options `--pathspec-from-file`, `--pathspec-file-nul`
 2:  96697ba072 ! 2:  55a7c6ec3c pathspec: add new function to parse file
     @@ -45,7 +45,7 @@
      +						       strbuf_getline;
      +	struct strbuf buf = STRBUF_INIT;
      +	struct strbuf unquoted = STRBUF_INIT;
     -+	FILE *in = NULL;
     ++	FILE *in;
      +
      +	if (!strcmp(file, "-"))
      +		in = stdin;
 3:  f961a5155a ! 3:  d9f32e523c doc: reset: unify <pathspec> description
     @@ -1,8 +1,8 @@
      Author: Alexandr Miloslavskiy <alexandr.miloslavskiy@syntevo.com>
      
     -    doc: reset: unify <pathspec> description
     +    doc: reset: synchronize <pathspec> description
      
     -    Synchronize it to `git add`, which has a pretty good description.
     +    `git add` shows an example of good writing, follow it.
      
          Signed-off-by: Alexandr Miloslavskiy <alexandr.miloslavskiy@syntevo.com>
      
     @@ -21,18 +21,17 @@
       
       DESCRIPTION
      @@
     - In the third form, set the current branch head (`HEAD`) to `<commit>`,
       optionally modifying index and working tree to match.
       The `<tree-ish>`/`<commit>` defaults to `HEAD` in all forms.
     -+The <pathspec> is used to limit the paths affected by the operation
     -+(see the entry for 'pathspec' in linkgit:gitglossary[7] for more details).
       
      -'git reset' [-q] [<tree-ish>] [--] <paths>...::
      -	This form resets the index entries for all `<paths>` to their
     +-	state at `<tree-ish>`.  (It does not affect the working tree or
     +-	the current branch.)
      +'git reset' [-q] [<tree-ish>] [--] <pathspec>...::
     -+	This form resets the index entries for all `<pathspec>` to their
     - 	state at `<tree-ish>`.  (It does not affect the working tree or
     - 	the current branch.)
     ++	This form resets the index entries for all paths that match the
     ++	`<pathspec>` to their state at `<tree-ish>`.  (It does not affect
     ++	the working tree or the current branch.)
       +
      -This means that `git reset <paths>` is the opposite of `git add
      -<paths>`. This command is equivalent to
     @@ -54,6 +53,20 @@
       	Interactively select hunks in the difference between the index
       	and `<tree-ish>` (defaults to `HEAD`).  The chosen hunks are applied
       	in reverse to the index.
     +@@
     + 	`reset.quiet` config option. `--quiet` and `--no-quiet` will
     + 	override the default behavior.
     + 
     ++\--::
     ++	Do not interpret any more arguments as options.
     ++
     ++<pathspec>...::
     ++	Limits the paths affected by the operation.
     +++
     ++For more details, see the 'pathspec' entry in linkgit:gitglossary[7].
     + 
     + EXAMPLES
     + --------
      
       diff --git a/builtin/reset.c b/builtin/reset.c
       --- a/builtin/reset.c
 4:  d72d4f16b5 ! 4:  8a10ff881b reset: support the `--pathspec-from-file` option
     @@ -31,15 +31,13 @@
      +In the last form, set the current branch head (`HEAD`) to `<commit>`,
       optionally modifying index and working tree to match.
       The `<tree-ish>`/`<commit>` defaults to `HEAD` in all forms.
     - The <pathspec> is used to limit the paths affected by the operation
     - (see the entry for 'pathspec' in linkgit:gitglossary[7] for more details).
       
       'git reset' [-q] [<tree-ish>] [--] <pathspec>...::
     --	This form resets the index entries for all `<pathspec>` to their
     +-	This form resets the index entries for all paths that match the
      +'git reset' [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]::
     -+	These forms reset the index entries matching pathspec to their
     - 	state at `<tree-ish>`.  (It does not affect the working tree or
     - 	the current branch.)
     ++	These forms reset the index entries for all paths that match the
     + 	`<pathspec>` to their state at `<tree-ish>`.  (It does not affect
     + 	the working tree or the current branch.)
       +
      @@
       	`reset.quiet` config option. `--quiet` and `--no-quiet` will
     @@ -55,10 +53,12 @@
      +
      +--pathspec-file-nul::
      +	Only meaningful with `--pathspec-from-file`. Pathspec elements are
     -+	separated with NUL character and are not expected to be quoted.
     ++	separated with NUL character and all other characters are taken
     ++	literally (including newlines and quotes).
     ++
     + \--::
     + 	Do not interpret any more arguments as options.
       
     - EXAMPLES
     - --------
      
       diff --git a/builtin/reset.c b/builtin/reset.c
       --- a/builtin/reset.c
     @@ -241,7 +241,7 @@
      +	printf "\"file\\101.t\"" >list &&
      +	# Note: "git reset" has not yet learned to fail on wrong pathspecs
      +	git reset --pathspec-from-file=list --pathspec-file-nul &&
     -+	
     ++
      +	cat >expect <<-\EOF &&
      +	 D fileA.t
      +	EOF
 5:  20c4495fd3 ! 5:  0b79797e77 doc: commit: unify <pathspec> description
     @@ -1,8 +1,8 @@
      Author: Alexandr Miloslavskiy <alexandr.miloslavskiy@syntevo.com>
      
     -    doc: commit: unify <pathspec> description
     +    doc: commit: synchronize <pathspec> description
      
     -    Synchronize it to `git add`, which has a pretty good description.
     +    `git add` shows an example of good writing, follow it.
          This also better disambiguates <file>... header.
      
          Signed-off-by: Alexandr Miloslavskiy <alexandr.miloslavskiy@syntevo.com>
     @@ -35,8 +35,7 @@
      +	already added to the index. The contents of these files are also
      +	staged for the next commit on top of what have been staged before.
      ++
     -+For more details about the <pathspec> syntax, see the 'pathspec' entry
     -+in linkgit:gitglossary[7].
     ++For more details, see the 'pathspec' entry in linkgit:gitglossary[7].
       
       :git-commit: 1
       include::date-formats.txt[]
 6:  cb5fc9b14d ! 6:  7e48212002 commit: support the --pathspec-from-file option
     @@ -25,10 +25,9 @@
       DESCRIPTION
       -----------
      @@
     - 	the last commit without committing changes that have
       	already been staged. If used together with `--allow-empty`
       	paths are also not required, and an empty commit will be created.
     -+	
     + 
      +--pathspec-from-file=<file>::
      +	Pathspec is passed in `<file>` instead of commandline args. If
      +	`<file>` is exactly `-` then standard input is used. Pathspec
     @@ -39,10 +38,12 @@
      +
      +--pathspec-file-nul::
      +	Only meaningful with `--pathspec-from-file`. Pathspec elements are
     -+	separated with NUL character and are not expected to be quoted.
     - 
     ++	separated with NUL character and all other characters are taken
     ++	literally (including newlines and quotes).
     ++
       -u[<mode>]::
       --untracked-files[=<mode>]::
     + 	Show untracked files.
      
       diff --git a/builtin/commit.c b/builtin/commit.c
       --- a/builtin/commit.c
     @@ -118,7 +119,7 @@
      +test_expect_success setup '
      +	test_commit file0 &&
      +	git tag checkpoint &&
     -+	
     ++
      +	echo A >fileA.t &&
      +	echo B >fileB.t &&
      +	echo C >fileC.t &&
-- 
gitgitgadget
Previous: Alexandr Miloslavskiy via GitGitGadgetNext: Alexandr Miloslavskiy via GitGitGadget
Message 54 of 80 in “Add --pathspec-from-file option for reset, commit”
  1. 0/5 Add --pathspec-from-file option for reset, commitAlexandr Miloslavskiy via GitGitGadget, Nov 4, 2019
  2. 1/5 pathspec: add new function to parse fileAlexandr Miloslavskiy via GitGitGadget, Nov 4, 2019
  3. Phillip WoodNov 5, 2019
  4. Alexandr MiloslavskiyNov 5, 2019
  5. Alexandr MiloslavskiyNov 6, 2019
  6. 3/5 reset: support the --pathspec-from-file optionAlexandr Miloslavskiy via GitGitGadget, Nov 4, 2019
  7. Phillip WoodNov 5, 2019
  8. Phillip WoodNov 5, 2019
  9. Alexandr MiloslavskiyNov 5, 2019
  10. Alexandr MiloslavskiyNov 6, 2019
  11. Phillip WoodNov 5, 2019
  12. Alexandr MiloslavskiyNov 5, 2019
  13. Junio C HamanoNov 6, 2019
  14. Alexandr MiloslavskiyNov 6, 2019
  15. 4/5 doc: commit: unify <pathspec> descriptionAlexandr Miloslavskiy via GitGitGadget, Nov 4, 2019
  16. Junio C HamanoNov 6, 2019
  17. Alexandr MiloslavskiyNov 6, 2019
  18. Junio C HamanoNov 7, 2019
  19. Alexandr MiloslavskiyNov 7, 2019
  20. 5/5 commit: support the --pathspec-from-file optionAlexandr Miloslavskiy via GitGitGadget, Nov 4, 2019
  21. Phillip WoodNov 5, 2019
  22. Alexandr MiloslavskiyNov 5, 2019
  23. Alexandr MiloslavskiyNov 6, 2019
  24. Phillip WoodDec 10, 2019
  25. Alexandr MiloslavskiyDec 11, 2019
  26. Phillip WoodDec 11, 2019
  27. Alexandr MiloslavskiyDec 11, 2019
  28. Junio C HamanoDec 11, 2019
  29. Alexandr MiloslavskiyDec 11, 2019
  30. Alexandr MiloslavskiyDec 12, 2019
  31. Junio C HamanoNov 6, 2019
  32. 2/5 doc: reset: unify <pathspec> descriptionAlexandr Miloslavskiy via GitGitGadget, Nov 4, 2019
  33. Junio C HamanoNov 6, 2019
  34. Alexandr MiloslavskiyNov 6, 2019
  35. Junio C HamanoNov 7, 2019
  36. Alexandr MiloslavskiyNov 7, 2019
  37. Junio C HamanoNov 8, 2019
  38. 0/6 Add --pathspec-from-file option for reset, commitAlexandr Miloslavskiy via GitGitGadget, Nov 6, 2019
  39. 1/6 parse-options.h: add new options `--pathspec-from-file`, `--pathspec-file-nul`Alexandr Miloslavskiy via GitGitGadget, Nov 6, 2019
  40. 2/6 pathspec: add new function to parse fileAlexandr Miloslavskiy via GitGitGadget, Nov 6, 2019
  41. Junio C HamanoNov 19, 2019
  42. Alexandr MiloslavskiyNov 19, 2019
  43. 3/6 doc: reset: unify <pathspec> descriptionAlexandr Miloslavskiy via GitGitGadget, Nov 6, 2019
  44. Junio C HamanoNov 19, 2019
  45. Alexandr MiloslavskiyNov 19, 2019
  46. 6/6 commit: support the --pathspec-from-file optionAlexandr Miloslavskiy via GitGitGadget, Nov 6, 2019
  47. Junio C HamanoNov 19, 2019
  48. Alexandr MiloslavskiyNov 19, 2019
  49. 5/6 doc: commit: unify <pathspec> descriptionAlexandr Miloslavskiy via GitGitGadget, Nov 6, 2019
  50. Junio C HamanoNov 19, 2019
  51. Alexandr MiloslavskiyNov 19, 2019
  52. Alexandr MiloslavskiyNov 19, 2019
  53. 4/6 reset: support the `--pathspec-from-file` optionAlexandr Miloslavskiy via GitGitGadget, Nov 6, 2019
  54. 0/6 Add --pathspec-from-file option for reset, commitAlexandr Miloslavskiy via GitGitGadget, Nov 19, 2019
  55. 3/6 doc: reset: synchronize <pathspec> descriptionAlexandr Miloslavskiy via GitGitGadget, Nov 19, 2019
  56. 2/6 pathspec: add new function to parse fileAlexandr Miloslavskiy via GitGitGadget, Nov 19, 2019
  57. 5/6 doc: commit: synchronize <pathspec> descriptionAlexandr Miloslavskiy via GitGitGadget, Nov 19, 2019
  58. 4/6 reset: support the `--pathspec-from-file` optionAlexandr Miloslavskiy via GitGitGadget, Nov 19, 2019
  59. 1/6 parse-options.h: add new options `--pathspec-from-file`, `--pathspec-file-nul`Alexandr Miloslavskiy via GitGitGadget, Nov 19, 2019
  60. 6/6 commit: support the --pathspec-from-file optionAlexandr Miloslavskiy via GitGitGadget, Nov 19, 2019
  61. Junio C HamanoNov 20, 2019
  62. Alexandr MiloslavskiyNov 20, 2019
  63. 00/13 Add --pathspec-from-file optionAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  64. 01/13 parse-options.h: add new options `--pathspec-from-file`, `--pathspec-file-nul`Alexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  65. 03/13 doc: reset: synchronize <pathspec> descriptionAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  66. 02/13 pathspec: add new function to parse fileAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  67. 05/13 doc: commit: synchronize <pathspec> descriptionAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  68. 06/13 commit: support the --pathspec-from-file optionAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  69. 10/13 doc: checkout: fix broken text referenceAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  70. 07/13 cmd_add: prepare for next patchAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  71. 09/13 doc: checkout: remove duplicate synopsisAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  72. 04/13 reset: support the `--pathspec-from-file` optionAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  73. 08/13 add: support the --pathspec-from-file optionAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  74. 13/13 checkout, restore: support the --pathspec-from-file optionAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  75. 11/13 doc: checkout: synchronize <pathspec> descriptionAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  76. 12/13 doc: restore: synchronize <pathspec> descriptionAlexandr Miloslavskiy via GitGitGadget, Dec 3, 2019
  77. Junio C HamanoDec 3, 2019
  78. Alexandr MiloslavskiyDec 3, 2019
  79. Junio C HamanoDec 4, 2019
  80. Alexandr MiloslavskiyDec 5, 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.