Merge branch 'phase-out-reset-stdin'

This topic branch re-adds the deprecated --stdin/-z options to `git
reset`. Those patches were overridden by a different set of options in
the upstream Git project before we could propose `--stdin`.

We offered this in MinGit to applications that wanted a safer way to
pass lots of pathspecs to Git, and these applications will need to be
adjusted.

Instead of `--stdin`, `--pathspec-from-file=-` should be used, and
instead of `-z`, `--pathspec-file-nul`.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Johannes Schindelin 2018-06-08 18:34:51 +02:00
commit 5d06cc119c
4 changed files with 60 additions and 0 deletions

View File

@ -12,6 +12,7 @@ git reset [-q] [<tree-ish>] [--] <pathspec>...
git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>] git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]
git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>...] git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>...]
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>] git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
DEPRECATED: git reset [-q] [--stdin [-z]] [<tree-ish>]
DESCRIPTION DESCRIPTION
----------- -----------
@ -133,6 +134,16 @@ OPTIONS
+ +
For more details, see the 'pathspec' entry in linkgit:gitglossary[7]. For more details, see the 'pathspec' entry in linkgit:gitglossary[7].
--stdin::
DEPRECATED (use `--pathspec-from-file=-` instead): Instead of taking
list of paths from the command line, read list of paths from the
standard input. Paths are separated by LF (i.e. one path per line) by
default.
-z::
DEPRECATED (use `--pathspec-file-nul` instead): Only meaningful with
`--stdin`; paths are separated with NUL character instead of LF.
EXAMPLES EXAMPLES
-------- --------

View File

@ -38,6 +38,8 @@
#include "trace2.h" #include "trace2.h"
#include "dir.h" #include "dir.h"
#include "add-interactive.h" #include "add-interactive.h"
#include "strbuf.h"
#include "quote.h"
#define REFRESH_INDEX_DELAY_WARNING_IN_MS (2 * 1000) #define REFRESH_INDEX_DELAY_WARNING_IN_MS (2 * 1000)
@ -46,6 +48,7 @@ static const char * const git_reset_usage[] = {
N_("git reset [-q] [<tree-ish>] [--] <pathspec>..."), N_("git reset [-q] [<tree-ish>] [--] <pathspec>..."),
N_("git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]"), N_("git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]"),
N_("git reset --patch [<tree-ish>] [--] [<pathspec>...]"), N_("git reset --patch [<tree-ish>] [--] [<pathspec>...]"),
N_("DEPRECATED: git reset [-q] [--stdin [-z]] [<tree-ish>]"),
NULL NULL
}; };
@ -346,6 +349,7 @@ int cmd_reset(int argc,
struct object_id oid; struct object_id oid;
struct pathspec pathspec; struct pathspec pathspec;
int intent_to_add = 0; int intent_to_add = 0;
int nul_term_line = 0, read_from_stdin = 0;
const struct option options[] = { const struct option options[] = {
OPT__QUIET(&quiet, N_("be quiet, only report errors")), OPT__QUIET(&quiet, N_("be quiet, only report errors")),
OPT_BOOL(0, "no-refresh", &no_refresh, OPT_BOOL(0, "no-refresh", &no_refresh,
@ -374,6 +378,10 @@ int cmd_reset(int argc,
N_("record only the fact that removed paths will be added later")), N_("record only the fact that removed paths will be added later")),
OPT_PATHSPEC_FROM_FILE(&pathspec_from_file), OPT_PATHSPEC_FROM_FILE(&pathspec_from_file),
OPT_PATHSPEC_FILE_NUL(&pathspec_file_nul), OPT_PATHSPEC_FILE_NUL(&pathspec_file_nul),
OPT_BOOL('z', NULL, &nul_term_line,
N_("DEPRECATED (use --pathspec-file-nul instead): paths are separated with NUL character")),
OPT_BOOL(0, "stdin", &read_from_stdin,
N_("DEPRECATED (use --pathspec-from-file=- instead): read paths from <stdin>")),
OPT_END() OPT_END()
}; };
@ -383,6 +391,14 @@ int cmd_reset(int argc,
PARSE_OPT_KEEP_DASHDASH); PARSE_OPT_KEEP_DASHDASH);
parse_args(&pathspec, argv, prefix, patch_mode, &rev); parse_args(&pathspec, argv, prefix, patch_mode, &rev);
if (read_from_stdin) {
warning(_("--stdin is deprecated, please use --pathspec-from-file=- instead"));
free(pathspec_from_file);
pathspec_from_file = xstrdup("-");
if (nul_term_line)
pathspec_file_nul = 1;
}
if (pathspec_from_file) { if (pathspec_from_file) {
if (patch_mode) if (patch_mode)
die(_("options '%s' and '%s' cannot be used together"), "--pathspec-from-file", "--patch"); die(_("options '%s' and '%s' cannot be used together"), "--pathspec-from-file", "--patch");

View File

@ -865,6 +865,7 @@ integration_tests = [
't7105-reset-patch.sh', 't7105-reset-patch.sh',
't7106-reset-unborn-branch.sh', 't7106-reset-unborn-branch.sh',
't7107-reset-pathspec-file.sh', 't7107-reset-pathspec-file.sh',
't7108-reset-stdin.sh',
't7110-reset-merge.sh', 't7110-reset-merge.sh',
't7111-reset-table.sh', 't7111-reset-table.sh',
't7112-reset-submodule.sh', 't7112-reset-submodule.sh',

32
t/t7108-reset-stdin.sh Executable file
View File

@ -0,0 +1,32 @@
#!/bin/sh
test_description='reset --stdin'
. ./test-lib.sh
test_expect_success 'reset --stdin' '
test_commit hello &&
git rm hello.t &&
test -z "$(git ls-files hello.t)" &&
echo hello.t | git reset --stdin &&
test hello.t = "$(git ls-files hello.t)"
'
test_expect_success 'reset --stdin -z' '
test_commit world &&
git rm hello.t world.t &&
test -z "$(git ls-files hello.t world.t)" &&
printf world.tQworld.tQhello.tQ | q_to_nul | git reset --stdin -z &&
printf "hello.t\nworld.t\n" >expect &&
git ls-files >actual &&
test_cmp expect actual
'
test_expect_success '--stdin requires --mixed' '
echo hello.t >list &&
test_must_fail git reset --soft --stdin <list &&
test_must_fail git reset --hard --stdin <list &&
git reset --mixed --stdin <list
'
test_done