Skip to content

Commit 1c610a8

Browse files
dschoGit for Windows Build Agent
authored andcommitted
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 <[email protected]>
2 parents 98335f6 + 980fa9f commit 1c610a8

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

Documentation/git-reset.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ SYNOPSIS
1212
'git reset' [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]
1313
'git reset' (--patch | -p) [<tree-ish>] [--] [<pathspec>...]
1414
'git reset' [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
15+
DEPRECATED: 'git reset' [-q] [--stdin [-z]] [<tree-ish>]
1516

1617
DESCRIPTION
1718
-----------
@@ -133,6 +134,16 @@ OPTIONS
133134
+
134135
For more details, see the 'pathspec' entry in linkgit:gitglossary[7].
135136

137+
--stdin::
138+
DEPRECATED (use `--pathspec-from-file=-` instead): Instead of taking
139+
list of paths from the command line, read list of paths from the
140+
standard input. Paths are separated by LF (i.e. one path per line) by
141+
default.
142+
143+
-z::
144+
DEPRECATED (use `--pathspec-file-nul` instead): Only meaningful with
145+
`--stdin`; paths are separated with NUL character instead of LF.
146+
136147
EXAMPLES
137148
--------
138149

builtin/reset.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
#include "submodule-config.h"
2828
#include "dir.h"
2929
#include "add-interactive.h"
30+
#include "strbuf.h"
31+
#include "quote.h"
3032

3133
#define REFRESH_INDEX_DELAY_WARNING_IN_MS (2 * 1000)
3234

@@ -35,6 +37,7 @@ static const char * const git_reset_usage[] = {
3537
N_("git reset [-q] [<tree-ish>] [--] <pathspec>..."),
3638
N_("git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]"),
3739
N_("git reset --patch [<tree-ish>] [--] [<pathspec>...]"),
40+
N_("DEPRECATED: git reset [-q] [--stdin [-z]] [<tree-ish>]"),
3841
NULL
3942
};
4043

@@ -321,6 +324,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
321324
struct object_id oid;
322325
struct pathspec pathspec;
323326
int intent_to_add = 0;
327+
int nul_term_line = 0, read_from_stdin = 0;
324328
const struct option options[] = {
325329
OPT__QUIET(&quiet, N_("be quiet, only report errors")),
326330
OPT_BOOL(0, "no-refresh", &no_refresh,
@@ -342,6 +346,10 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
342346
N_("record only the fact that removed paths will be added later")),
343347
OPT_PATHSPEC_FROM_FILE(&pathspec_from_file),
344348
OPT_PATHSPEC_FILE_NUL(&pathspec_file_nul),
349+
OPT_BOOL('z', NULL, &nul_term_line,
350+
N_("DEPRECATED (use --pathspec-file-nul instead): paths are separated with NUL character")),
351+
OPT_BOOL(0, "stdin", &read_from_stdin,
352+
N_("DEPRECATED (use --pathspec-from-file=- instead): read paths from <stdin>")),
345353
OPT_END()
346354
};
347355

@@ -351,6 +359,12 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
351359
PARSE_OPT_KEEP_DASHDASH);
352360
parse_args(&pathspec, argv, prefix, patch_mode, &rev);
353361

362+
if (read_from_stdin) {
363+
pathspec_from_file = "-";
364+
if (nul_term_line)
365+
pathspec_file_nul = 1;
366+
}
367+
354368
if (pathspec_from_file) {
355369
if (patch_mode)
356370
die(_("options '%s' and '%s' cannot be used together"), "--pathspec-from-file", "--patch");

t/t7108-reset-stdin.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/sh
2+
3+
test_description='reset --stdin'
4+
5+
. ./test-lib.sh
6+
7+
test_expect_success 'reset --stdin' '
8+
test_commit hello &&
9+
git rm hello.t &&
10+
test -z "$(git ls-files hello.t)" &&
11+
echo hello.t | git reset --stdin &&
12+
test hello.t = "$(git ls-files hello.t)"
13+
'
14+
15+
test_expect_success 'reset --stdin -z' '
16+
test_commit world &&
17+
git rm hello.t world.t &&
18+
test -z "$(git ls-files hello.t world.t)" &&
19+
printf world.tQworld.tQhello.tQ | q_to_nul | git reset --stdin -z &&
20+
printf "hello.t\nworld.t\n" >expect &&
21+
git ls-files >actual &&
22+
test_cmp expect actual
23+
'
24+
25+
test_expect_success '--stdin requires --mixed' '
26+
echo hello.t >list &&
27+
test_must_fail git reset --soft --stdin <list &&
28+
test_must_fail git reset --hard --stdin <list &&
29+
git reset --mixed --stdin <list
30+
'
31+
32+
test_done

0 commit comments

Comments
 (0)