mirror of
https://github.com/git/git.git
synced 2024-11-23 18:05:29 +08:00
Merge branch 'jc/check-x-z'
"git check-ignore -z" applied the NUL termination to both its input (with --stdin) and its output, but "git check-attr -z" ignored the option on the output side. This is potentially a backward incompatible fix. Let's see if anybody screams before deciding if we want to do anything to help existing users (there may be none). * jc/check-x-z: check-attr -z: a single -z should apply to both input and output check-ignore -z: a single -z should apply to both input and output check-attr: the name of the character is NUL, not NULL check-ignore: the name of the character is NUL, not NULL
This commit is contained in:
commit
0db320d023
@ -31,8 +31,9 @@ OPTIONS
|
||||
Read file names from stdin instead of from the command-line.
|
||||
|
||||
-z::
|
||||
Only meaningful with `--stdin`; paths are separated with a
|
||||
NUL character instead of a linefeed character.
|
||||
The output format is modified to be machine-parseable.
|
||||
If `--stdin` is also given, input paths are separated
|
||||
with a NUL character instead of a linefeed character.
|
||||
|
||||
\--::
|
||||
Interpret all preceding arguments as attributes and all following
|
||||
@ -48,6 +49,10 @@ OUTPUT
|
||||
The output is of the form:
|
||||
<path> COLON SP <attribute> COLON SP <info> LF
|
||||
|
||||
unless `-z` is in effect, in which case NUL is used as delimiter:
|
||||
<path> NUL <attribute> NUL <info> NUL
|
||||
|
||||
|
||||
<path> is the path of a file being queried, <attribute> is an attribute
|
||||
being queried and <info> can be either:
|
||||
|
||||
|
@ -13,14 +13,14 @@ N_("git check-attr --stdin [-z] [-a | --all | attr...] < <list-of-paths>"),
|
||||
NULL
|
||||
};
|
||||
|
||||
static int null_term_line;
|
||||
static int nul_term_line;
|
||||
|
||||
static const struct option check_attr_options[] = {
|
||||
OPT_BOOLEAN('a', "all", &all_attrs, N_("report all attributes set on file")),
|
||||
OPT_BOOLEAN(0, "cached", &cached_attrs, N_("use .gitattributes only from the index")),
|
||||
OPT_BOOLEAN(0 , "stdin", &stdin_paths, N_("read file names from stdin")),
|
||||
OPT_BOOLEAN('z', NULL, &null_term_line,
|
||||
N_("input paths are terminated by a null character")),
|
||||
OPT_BOOLEAN('z', NULL, &nul_term_line,
|
||||
N_("terminate input and output records by a NUL character")),
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
@ -38,8 +38,16 @@ static void output_attr(int cnt, struct git_attr_check *check,
|
||||
else if (ATTR_UNSET(value))
|
||||
value = "unspecified";
|
||||
|
||||
quote_c_style(file, NULL, stdout, 0);
|
||||
printf(": %s: %s\n", git_attr_name(check[j].attr), value);
|
||||
if (nul_term_line) {
|
||||
printf("%s%c" /* path */
|
||||
"%s%c" /* attrname */
|
||||
"%s%c" /* attrvalue */,
|
||||
file, 0, git_attr_name(check[j].attr), 0, value, 0);
|
||||
} else {
|
||||
quote_c_style(file, NULL, stdout, 0);
|
||||
printf(": %s: %s\n", git_attr_name(check[j].attr), value);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,7 +73,7 @@ static void check_attr_stdin_paths(const char *prefix, int cnt,
|
||||
struct git_attr_check *check)
|
||||
{
|
||||
struct strbuf buf, nbuf;
|
||||
int line_termination = null_term_line ? 0 : '\n';
|
||||
int line_termination = nul_term_line ? 0 : '\n';
|
||||
|
||||
strbuf_init(&buf, 0);
|
||||
strbuf_init(&nbuf, 0);
|
||||
|
@ -12,7 +12,7 @@ static const char * const check_ignore_usage[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static int null_term_line;
|
||||
static int nul_term_line;
|
||||
|
||||
static const struct option check_ignore_options[] = {
|
||||
OPT__QUIET(&quiet, N_("suppress progress reporting")),
|
||||
@ -20,8 +20,8 @@ static const struct option check_ignore_options[] = {
|
||||
OPT_GROUP(""),
|
||||
OPT_BOOLEAN(0, "stdin", &stdin_paths,
|
||||
N_("read file names from stdin")),
|
||||
OPT_BOOLEAN('z', NULL, &null_term_line,
|
||||
N_("input paths are terminated by a null character")),
|
||||
OPT_BOOLEAN('z', NULL, &nul_term_line,
|
||||
N_("terminate input and output records by a NUL character")),
|
||||
OPT_BOOLEAN('n', "non-matching", &show_non_matching,
|
||||
N_("show non-matching input paths")),
|
||||
OPT_END()
|
||||
@ -31,7 +31,7 @@ static void output_exclude(const char *path, struct exclude *exclude)
|
||||
{
|
||||
char *bang = (exclude && exclude->flags & EXC_FLAG_NEGATIVE) ? "!" : "";
|
||||
char *slash = (exclude && exclude->flags & EXC_FLAG_MUSTBEDIR) ? "/" : "";
|
||||
if (!null_term_line) {
|
||||
if (!nul_term_line) {
|
||||
if (!verbose) {
|
||||
write_name_quoted(path, stdout, '\n');
|
||||
} else {
|
||||
@ -107,7 +107,7 @@ static int check_ignore_stdin_paths(struct dir_struct *dir, const char *prefix)
|
||||
{
|
||||
struct strbuf buf, nbuf;
|
||||
char *pathspec[2] = { NULL, NULL };
|
||||
int line_termination = null_term_line ? 0 : '\n';
|
||||
int line_termination = nul_term_line ? 0 : '\n';
|
||||
int num_ignored = 0;
|
||||
|
||||
strbuf_init(&buf, 0);
|
||||
@ -142,7 +142,7 @@ int cmd_check_ignore(int argc, const char **argv, const char *prefix)
|
||||
if (argc > 0)
|
||||
die(_("cannot specify pathnames with --stdin"));
|
||||
} else {
|
||||
if (null_term_line)
|
||||
if (nul_term_line)
|
||||
die(_("-z only makes sense with --stdin"));
|
||||
if (argc == 0)
|
||||
die(_("no path specified"));
|
||||
|
Loading…
Reference in New Issue
Block a user