git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Johannes Schindelin <Johannes.Schindelin@gmx.de>
Subject: Re: [PATCH v4 08/21] checkout-index: there are only two possible line terminations
Date: Fri, 15 Jan 2016 15:20:54 -0500	[thread overview]
Message-ID: <20160115202053.GA27640@sigill.intra.peff.net> (raw)
In-Reply-To: <20160115200856.GC11301@sigill.intra.peff.net>

On Fri, Jan 15, 2016 at 03:08:56PM -0500, Jeff King wrote:

> Is it worth doing this on top?
> 
> -- >8 --
> Subject: [PATCH] checkout-index: simplify "-z" option parsing
> 
> Now that we act as a simple bool, there's no need to use a
> custom callback.

Of course this is a backward step if we wanted to add negation. But I
suspect if we did so it would not be as "--no-nul-termination" (which
involves inventing "--nul-termination" in the first place), but rather
as a separate option. Anyway, since AFAIK nobody has plans to add one,
the code has been like this for years, we don't significantly impede
anyone from doing it later, I'm inclined to err on the side of
simplifying.

If we do, there are two similar candidates:

-- >8 --
Subject: [PATCH] apply, ls-files: simplify "-z" parsing

As a short option, we cannot handle negation. Thus a
callback handling "unset" is overkill, and we can just use
OPT_SET_INT instead to handle setting the option.

Signed-off-by: Jeff King <peff@peff.net>
---
These could also become OPT_BOOL, but then we have to translate that to
'\n' / NUL later in the code.

I was also curious what "--no-foo" does (if a long option _is_ defined)
with OPT_SET_INT. It resets the value to 0, which would be wrong in this
case. I guess that makes a slight trap for anybody adding
"--nul-termination" later (if they do not think about 
"--no-nul-termination", they may not realize it does not work). I'm not
all that moved by that line of reasoning personally, though.

 builtin/apply.c    | 15 ++-------------
 builtin/ls-files.c | 13 ++-----------
 2 files changed, 4 insertions(+), 24 deletions(-)

diff --git a/builtin/apply.c b/builtin/apply.c
index deb1364..565f3fd 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -4464,16 +4464,6 @@ static int option_parse_p(const struct option *opt,
 	return 0;
 }
 
-static int option_parse_z(const struct option *opt,
-			  const char *arg, int unset)
-{
-	if (unset)
-		line_termination = '\n';
-	else
-		line_termination = 0;
-	return 0;
-}
-
 static int option_parse_space_change(const struct option *opt,
 			  const char *arg, int unset)
 {
@@ -4546,9 +4536,8 @@ int cmd_apply(int argc, const char **argv, const char *prefix_)
 			 N_( "attempt three-way merge if a patch does not apply")),
 		OPT_FILENAME(0, "build-fake-ancestor", &fake_ancestor,
 			N_("build a temporary index based on embedded index information")),
-		{ OPTION_CALLBACK, 'z', NULL, NULL, NULL,
-			N_("paths are separated with NUL character"),
-			PARSE_OPT_NOARG, option_parse_z },
+		OPT_SET_INT('z', NULL, &line_termination,
+			N_("paths are separated with NUL character"), '\0'),
 		OPT_INTEGER('C', NULL, &p_context,
 				N_("ensure at least <n> lines of context match")),
 		{ OPTION_CALLBACK, 0, "whitespace", &whitespace_option, N_("action"),
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index b6a7cb0..59bad9b 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -359,14 +359,6 @@ static const char * const ls_files_usage[] = {
 	NULL
 };
 
-static int option_parse_z(const struct option *opt,
-			  const char *arg, int unset)
-{
-	line_terminator = unset ? '\n' : '\0';
-
-	return 0;
-}
-
 static int option_parse_exclude(const struct option *opt,
 				const char *arg, int unset)
 {
@@ -408,9 +400,8 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
 	struct exclude_list *el;
 	struct string_list exclude_list = STRING_LIST_INIT_NODUP;
 	struct option builtin_ls_files_options[] = {
-		{ OPTION_CALLBACK, 'z', NULL, NULL, NULL,
-			N_("paths are separated with NUL character"),
-			PARSE_OPT_NOARG, option_parse_z },
+		OPT_SET_INT('z', NULL, &line_terminator,
+			N_("paths are separated with NUL character"), '\0'),
 		OPT_BOOL('t', NULL, &show_tag,
 			N_("identify the file status with tags")),
 		OPT_BOOL('v', NULL, &show_valid_bit,
-- 
2.7.0.244.g0701a9d

  reply	other threads:[~2016-01-15 20:21 UTC|newest]

Thread overview: 114+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-11 20:21 [PATCH] revisions --stdin: accept CRLF line terminators Johannes Sixt
2015-08-11 21:35 ` Junio C Hamano
2015-08-11 22:14   ` Junio C Hamano
2015-08-12 18:24     ` Johannes Sixt
2015-10-28 22:25     ` [PATCH 00/17] Peace with CRLF Junio C Hamano
2015-10-28 22:25       ` [PATCH 01/17] strbuf: add strbuf_gets() Junio C Hamano
2015-10-28 22:25       ` [PATCH 02/17] check-attr, check-ignore, checkout-index: read paths with strbuf_gets() Junio C Hamano
2015-10-28 22:25       ` [PATCH 03/17] update-index: read --index-info " Junio C Hamano
2015-10-28 22:25       ` [PATCH 04/17] update-index: read list of paths with strbuf_gets() under --stdin Junio C Hamano
2015-10-28 22:25       ` [PATCH 05/17] mktree: read textual tree representation with strbuf_gets() Junio C Hamano
2015-10-28 22:25       ` [PATCH 06/17] hash-object: read --stdin-paths " Junio C Hamano
2015-10-28 22:25       ` [PATCH 07/17] revision: read --stdin " Junio C Hamano
2015-10-28 22:25       ` [PATCH 08/17] rev-parse: read parseopt spec " Junio C Hamano
2015-10-28 22:25       ` [PATCH 09/17] ident.c: read /etc/mailname " Junio C Hamano
2015-10-28 22:25       ` [PATCH 10/17] remote.c: read $GIT_DIR/remotes/* " Junio C Hamano
2015-10-28 22:25       ` [PATCH 11/17] clone/sha1_file: read info/alternates " Junio C Hamano
2015-10-28 22:25       ` [PATCH 12/17] transport-helper: read helper response " Junio C Hamano
2015-10-28 22:25       ` [PATCH 13/17] cat-file: read batch stream " Junio C Hamano
2015-10-28 22:25       ` [PATCH 14/17] column: read lines " Junio C Hamano
2015-10-28 22:25       ` [PATCH 15/17] send-pack: read list of refs " Junio C Hamano
2015-10-28 22:26       ` [PATCH 16/17] grep: read -f file " Junio C Hamano
2015-10-28 22:26       ` [PATCH 17/17] test-sha1-array: read command stream " Junio C Hamano
2015-12-16 22:03       ` [PATCH v2 00/17] Peace with CRLF Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 01/17] strbuf: make strbuf_getline_crlf() global Junio C Hamano
2016-01-04 12:25           ` Johannes Schindelin
2016-01-04 19:17             ` Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 02/17] check-attr, check-ignore, checkout-index: read paths with strbuf_getline_crlf() Junio C Hamano
2016-01-04 12:25           ` Johannes Schindelin
2016-01-04 12:27             ` Johannes Schindelin
2016-01-04 19:20               ` Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 03/17] update-index: read --index-info " Junio C Hamano
2016-01-04 12:27           ` Johannes Schindelin
2016-01-04 19:50             ` Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 04/17] update-index: read list of paths with strbuf_getline_crlf() under --stdin Junio C Hamano
2016-01-04 12:27           ` Johannes Schindelin
2015-12-16 22:03         ` [PATCH v2 05/17] mktree: read textual tree representation with strbuf_getline_crlf() Junio C Hamano
2016-01-04 12:27           ` Johannes Schindelin
2015-12-16 22:03         ` [PATCH v2 06/17] hash-object: read --stdin-paths " Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 07/17] revision: read --stdin " Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 08/17] rev-parse: read parseopt spec " Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 09/17] ident.c: read /etc/mailname " Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 10/17] remote.c: read $GIT_DIR/remotes/* " Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 11/17] clone/sha1_file: read info/alternates " Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 12/17] transport-helper: read helper response " Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 13/17] cat-file: read batch stream " Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 14/17] column: read lines " Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 15/17] send-pack: read list of refs " Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 16/17] grep: read -f file " Junio C Hamano
2016-01-04 12:27           ` Johannes Schindelin
2016-01-04 19:30             ` Junio C Hamano
2015-12-16 22:03         ` [PATCH v2 17/17] test-sha1-array: read command stream " Junio C Hamano
2016-01-04 12:27           ` Johannes Schindelin
2016-01-04 12:25         ` [PATCH v2 00/17] Peace with CRLF Johannes Schindelin
2016-01-14  3:03         ` [PREVIEW v3 0/9] Preview of "Peace with CRLF" rerolled Junio C Hamano
2016-01-14  3:03           ` [PREVIEW v3 1/9] strbuf: miniscule style fix Junio C Hamano
2016-01-14  3:03           ` [PREVIEW v3 2/9] strbuf: make strbuf_getline_crlf() global Junio C Hamano
2016-01-14  3:03           ` [PREVIEW v3 3/9] strbuf: introduce strbuf_getline_{lf,nul}() Junio C Hamano
2016-01-14  3:03           ` [PREVIEW v3 4/9] mktree: there are only two line terminators Junio C Hamano
2016-01-14 10:11             ` Jeff King
2016-01-14  3:03           ` [PREVIEW v3 5/9] check-attr: " Junio C Hamano
2016-01-14  3:03           ` [PREVIEW v3 6/9] check-ignore: " Junio C Hamano
2016-01-14  3:03           ` [PREVIEW v3 7/9] update-index: " Junio C Hamano
2016-01-14 10:09             ` Jeff King
2016-01-14  3:03           ` [PREVIEW v3 8/9] checkout-index: " Junio C Hamano
2016-01-14 10:18             ` Jeff King
2016-01-14 17:13               ` Junio C Hamano
2016-01-14 20:13                 ` Jeff King
2016-01-14  3:03           ` [PREVIEW v3 9/9] strbuf: give strbuf_getline() to the "most text friendly" variant Junio C Hamano
2016-01-14  3:03           ` [PREVIEW v3 9/9] strbuf: retire strbuf_getline() for now Junio C Hamano
2016-01-14  3:09             ` Junio C Hamano
2016-01-14 10:23           ` [PREVIEW v3 0/9] Preview of "Peace with CRLF" rerolled Jeff King
2016-01-14 23:58           ` [PATCH v4 00/21] Peace with CRLF Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 01/21] strbuf: miniscule style fix Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 02/21] strbuf: make strbuf_getline_crlf() global Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 03/21] strbuf: introduce strbuf_getline_{lf,nul}() Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 04/21] mktree: there are only two possible line terminations Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 05/21] check-attr: " Junio C Hamano
2016-01-15 19:16               ` Jeff King
2016-01-15 19:36                 ` Jeff King
2016-01-15 21:20                   ` Junio C Hamano
2016-01-15 21:23                     ` Jeff King
2016-01-15 21:29                       ` Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 06/21] check-ignore: " Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 07/21] update-index: " Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 08/21] checkout-index: " Junio C Hamano
2016-01-15 20:08               ` Jeff King
2016-01-15 20:20                 ` Jeff King [this message]
2016-01-15 21:22                 ` Junio C Hamano
2016-01-15 23:31                   ` Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 09/21] strbuf: give strbuf_getline() to the "most text friendly" variant Junio C Hamano
2016-01-15  1:46               ` Eric Sunshine
2016-01-15 18:02                 ` Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 10/21] hash-object: read --stdin-paths with strbuf_getline() Junio C Hamano
2016-01-15 20:23               ` Jeff King
2016-01-14 23:58             ` [PATCH v4 11/21] revision: read --stdin " Junio C Hamano
2016-01-15  1:50               ` Eric Sunshine
2016-01-15 18:38                 ` Junio C Hamano
2016-01-15 20:27               ` Jeff King
2016-01-14 23:58             ` [PATCH v4 12/21] rev-parse: read parseopt spec " Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 13/21] ident.c: read /etc/mailname " Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 14/21] remote.c: read $GIT_DIR/remotes/* " Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 15/21] clone/sha1_file: read info/alternates " Junio C Hamano
2016-01-15  1:52               ` Eric Sunshine
2016-01-14 23:58             ` [PATCH v4 16/21] transport-helper: read helper response " Junio C Hamano
2016-01-15 20:31               ` Jeff King
2016-01-14 23:58             ` [PATCH v4 17/21] cat-file: read batch stream " Junio C Hamano
2016-01-15 20:41               ` Jeff King
2016-01-14 23:58             ` [PATCH v4 18/21] column: read lines " Junio C Hamano
2016-01-15 20:43               ` Jeff King
2016-01-14 23:58             ` [PATCH v4 19/21] send-pack: read list of refs " Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 20/21] grep: read -f file " Junio C Hamano
2016-01-14 23:58             ` [PATCH v4 21/21] test-sha1-array: read command stream " Junio C Hamano
2016-01-15 19:10             ` [PATCH v4 00/21] Peace with CRLF Jeff King
2016-01-15 20:49             ` Jeff King

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160115202053.GA27640@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).