From: Dmitry Potapov <dpotapov@gmail.com>
To: "Shawn O. Pearce" <spearce@spearce.org>
Cc: Johannes Sixt <j.sixt@viscovery.net>,
Alexander Gavrilov <angavrilov@gmail.com>,
git@vger.kernel.org, Paul Mackerras <paulus@samba.org>
Subject: Re: [PATCH 2/2 v2] check-attr: Add --stdin-paths option
Date: Sun, 12 Oct 2008 18:19:52 +0400 [thread overview]
Message-ID: <20081012141952.GD21650@dpotapov.dyndns.org> (raw)
In-Reply-To: <20081008152443.GA4795@spearce.org>
On Wed, Oct 08, 2008 at 08:24:43AM -0700, Shawn O. Pearce wrote:
> Dmitry Potapov <dpotapov@gmail.com> wrote:
> > This allows multiple paths to be specified on stdin.
>
> > diff --git a/Documentation/git-check-attr.txt b/Documentation/git-check-attr.txt
> > index 2b821f2..0839a57 100644
> > --- a/Documentation/git-check-attr.txt
> > +++ b/Documentation/git-check-attr.txt
> > @@ -9,6 +9,7 @@ git-check-attr - Display gitattributes information.
> > SYNOPSIS
> > --------
> > 'git check-attr' attr... [--] pathname...
> > +'git check-attr' --stdin-paths attr... < <list-of-paths
>
> I wonder if the option should just be "--stdin".
I used "--stdin-paths" because git hash-object uses it, while "--stdin"
means to read the object from standard input. OTOH, we are never going
to read the object from standard input in check-attr and some other git
commands use "--stdin" to mean: read the list of paths from the standard
input. So, I fully agree here.
> 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?
NUL terminated makes sense when you feed raw-bytes, and if the first
byte happen to be a quote character, I suppose it should be treated
just as any other byte, not as a sign that the string is quited. But
then I looked at git checkout-index, and it unquotes string even if it
is NUL terminated. I don't think it is the right thing to do, but just
to be consistent, I have decided to leave as-is, i.e. to unquote a NUL
terminated string.
> > +test_expect_success 'attribute test: read paths from stdin' '
>
> A test case for the quoting might also be good.
As far as I can tell, there is no test case for special characters in
filenames when these filenames are given as arguments. And there are a
few problems with them. First, it is using colon as a separator in
output, which breaks parsing of a filename containing colons. Second,
I still have not figured out how to specify filenames with special
characters in gitattributes. The documentation does not say anything
and was lazy to study the code. Does gitattributes understand quote
strings in filenames?
Anyway, here is interdiff to my previous patch, which addresses two
first points as I described above. (I can resend the full patch if
necessary).
-- >8 --
From: Dmitry Potapov <dpotapov@gmail.com>
Date: Sun, 12 Oct 2008 18:08:43 +0400
Subject: [PATCH] check-attr: Add --stdin option
---
Documentation/git-check-attr.txt | 8 ++++++--
builtin-check-attr.c | 13 +++++++++----
t/t0003-attributes.sh | 2 +-
3 files changed, 16 insertions(+), 7 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..02a8292 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,10 +45,11 @@ 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) {
+ while (strbuf_getline(&buf, stdin, line_termination) != EOF) {
if (buf.buf[0] == '"') {
strbuf_reset(&nbuf);
if (unquote_c_style(&nbuf, buf.buf, NULL))
@@ -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.g49aa8.dirty
-- >8 --
next prev parent reply other threads:[~2008-10-12 14:21 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-17 21:07 [PATCH (GIT-GUI,GITK) 0/8] Encoding support in GUI Alexander Gavrilov
2008-09-17 21:07 ` [PATCH (GIT-GUI,GITK) 1/8] git-gui: Cleanup handling of the default encoding Alexander Gavrilov
2008-09-17 21:07 ` [PATCH (GIT-GUI,GITK) 2/8] git-gui: Add a menu of available encodings Alexander Gavrilov
2008-09-17 21:07 ` [PATCH (GIT-GUI,GITK) 3/8] git-gui: Allow forcing display encoding for diffs using a submenu Alexander Gavrilov
2008-09-17 21:07 ` [PATCH (GIT-GUI,GITK) 4/8] git-gui: Optimize encoding name resolution using a lookup table Alexander Gavrilov
2008-09-17 21:07 ` [PATCH (GIT-GUI,GITK) 5/8] git-gui: Support the encoding menu in gui blame Alexander Gavrilov
2008-09-17 21:07 ` [PATCH (GIT-GUI,GITK) 6/8] gitk: Port new encoding logic from git-gui Alexander Gavrilov
2008-09-17 21:07 ` [PATCH (GIT-GUI,GITK) 7/8] gitk: Implement file contents encoding support Alexander Gavrilov
2008-09-17 21:07 ` [PATCH (GIT-GUI,GITK) 8/8] gitk: Support filenames in the locale encoding Alexander Gavrilov
2008-09-19 12:10 ` [PATCH (GIT-GUI,GITK) 6/8] gitk: Port new encoding logic from git-gui Johannes Sixt
2008-09-19 12:38 ` Alexander Gavrilov
2008-09-19 13:04 ` Johannes Sixt
2008-09-21 18:52 ` Alexander Gavrilov
2008-09-22 7:25 ` Johannes Sixt
2008-09-22 7:46 ` Johannes Sixt
2008-09-22 8:01 ` Alexander Gavrilov
2008-09-22 8:20 ` Johannes Sixt
2008-09-22 9:02 ` Alexander Gavrilov
2008-09-22 9:18 ` Johannes Sixt
2008-09-22 10:18 ` Alexander Gavrilov
2008-09-22 9:01 ` Dmitry Potapov
2008-09-18 15:02 ` [PATCH (GIT-GUI,GITK) 1/8] git-gui: Cleanup handling of the default encoding Dmitry Potapov
2008-09-18 15:14 ` Alexander Gavrilov
2008-09-18 16:29 ` Johannes Sixt
2008-09-18 16:50 ` Dmitry Potapov
2008-09-18 17:00 ` Alexander Gavrilov
2008-09-18 17:19 ` Dmitry Potapov
2008-09-17 21:45 ` [PATCH (GIT-GUI,GITK) 0/8] Encoding support in GUI Paul Mackerras
2008-09-18 11:12 ` Alexander Gavrilov
2008-09-21 22:55 ` Paul Mackerras
2008-09-22 10:12 ` Alexander Gavrilov
2008-10-05 2:30 ` [PATCH 1/2] check-attr: add an internal check_attr() function Dmitry Potapov
2008-10-05 2:30 ` [PATCH 2/2] check-attr: Add --stdin-paths option Dmitry Potapov
2008-10-06 7:09 ` Johannes Sixt
2008-10-07 0:14 ` [PATCH 1/2 v2] check-attr: add an internal check_attr() function Dmitry Potapov
2008-10-07 0:16 ` [PATCH 2/2 v2] check-attr: Add --stdin-paths option Dmitry Potapov
2008-10-08 15:24 ` Shawn O. Pearce
2008-10-12 14:19 ` Dmitry Potapov [this message]
2008-10-12 15:04 ` Jakub Narebski
2008-10-12 16:35 ` Dmitry Potapov
2008-10-10 22:39 ` Paul Mackerras
2008-10-12 14:30 ` Dmitry Potapov
2008-10-01 11:35 ` [PATCH (GIT-GUI,GITK) 0/8] Encoding support in GUI Johannes Sixt
2008-10-10 10:46 ` Paul Mackerras
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081012141952.GD21650@dpotapov.dyndns.org \
--to=dpotapov@gmail.com \
--cc=angavrilov@gmail.com \
--cc=git@vger.kernel.org \
--cc=j.sixt@viscovery.net \
--cc=paulus@samba.org \
--cc=spearce@spearce.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).