On Sun, Oct 12, 2008 at 05:04:21PM +0200, Jakub Narebski wrote: > Dmitry Potapov wrote: > > >> And since its being > >> used mostly by automated tools (gitk/git-gui) I wonder if a -z should > >> also be supported for input termination with NUL instead of LF. > > > > I have added it, but after I did, I start to wonder whether it is the > > right thing to do to unquote NUL terminated input line? > > I think that -z should be not quoted (like git-diff-tree or git-ls-tree > _output_); if it is, then IMHO it is a bug. I am sorry. I was obviously wrong about 'git checkout-index', as it does not try to unquote if '-z' is specified. So, my previous patch was wrong. The corrected patch is below. It still uses the same output format whether '-z' is specified or not. Maybe I should change that too to use '\0' as the separator if '-z' is specified? Dmitry PS Please, add me to 'To:' or 'Cc:' when you reply to my email. -- >8 -- From: Dmitry Potapov <dpotapov@xxxxxxxxx> Date: Sun, 12 Oct 2008 18:08:43 +0400 Subject: [PATCH] check-attr: Add --stdin option --- This patch is meant to be squash on top of dp/checkattr in pu. Documentation/git-check-attr.txt | 8 ++++++-- builtin-check-attr.c | 15 ++++++++++----- t/t0003-attributes.sh | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Documentation/git-check-attr.txt b/Documentation/git-check-attr.txt index 0839a57..14e4374 100644 --- a/Documentation/git-check-attr.txt +++ b/Documentation/git-check-attr.txt @@ -9,7 +9,7 @@ git-check-attr - Display gitattributes information. SYNOPSIS -------- 'git check-attr' attr... [--] pathname... -'git check-attr' --stdin-paths attr... < <list-of-paths +'git check-attr' --stdin [-z] attr... < <list-of-paths DESCRIPTION ----------- @@ -18,9 +18,13 @@ For every pathname, this command will list if each attr is 'unspecified', OPTIONS ------- ---stdin-paths:: +--stdin:: Read file names from stdin instead of from the command-line. +-z:: + Only meaningful with `--stdin`; paths are separated with + NUL character instead of LF. + \--:: Interpret all preceding arguments as attributes, and all following arguments as path names. If not supplied, only the first argument will diff --git a/builtin-check-attr.c b/builtin-check-attr.c index fa1e4d5..4921341 100644 --- a/builtin-check-attr.c +++ b/builtin-check-attr.c @@ -7,12 +7,16 @@ static int stdin_paths; static const char * const check_attr_usage[] = { "git check-attr attr... [--] pathname...", -"git check-attr --stdin-paths attr... < <list-of-paths>", +"git check-attr --stdin attr... < <list-of-paths>", NULL }; +static int null_term_line; + static const struct option check_attr_options[] = { - OPT_BOOLEAN(0 , "stdin-paths", &stdin_paths, "read file names from stdin"), + OPT_BOOLEAN(0 , "stdin", &stdin_paths, "read file names from stdin"), + OPT_BOOLEAN('z', NULL, &null_term_line, + "input paths are terminated by a null character"), OPT_END() }; @@ -41,11 +45,12 @@ static void check_attr_stdin_paths(int cnt, struct git_attr_check *check, const char** name) { struct strbuf buf, nbuf; + int line_termination = null_term_line ? 0 : '\n'; strbuf_init(&buf, 0); strbuf_init(&nbuf, 0); - while (strbuf_getline(&buf, stdin, '\n') != EOF) { - if (buf.buf[0] == '"') { + while (strbuf_getline(&buf, stdin, line_termination) != EOF) { + if (line_termination && buf.buf[0] == '"') { strbuf_reset(&nbuf); if (unquote_c_style(&nbuf, buf.buf, NULL)) die("line is badly quoted"); @@ -90,7 +95,7 @@ int cmd_check_attr(int argc, const char **argv, const char *prefix) if (cnt <= 0) errstr = "No attribute specified"; else if (stdin_paths && doubledash < argc) - errstr = "Can't specify files with --stdin-paths"; + errstr = "Can't specify files with --stdin"; if (errstr) { error (errstr); usage_with_options(check_attr_usage, check_attr_options); diff --git a/t/t0003-attributes.sh b/t/t0003-attributes.sh index f6901b4..1c77192 100755 --- a/t/t0003-attributes.sh +++ b/t/t0003-attributes.sh @@ -60,7 +60,7 @@ a/b/h: test: a/b/h a/b/d/g: test: a/b/d/* EOF - sed -e "s/:.*//" < expect | git check-attr --stdin-paths test > actual && + sed -e "s/:.*//" < expect | git check-attr --stdin test > actual && test_cmp expect actual ' -- 1.6.0.2.521.g739d3 -- >8 -- -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html