From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, David Bremner <bremner@unb.ca>
Subject: Re: git status in clean working dir
Date: Tue, 22 Jul 2008 00:41:57 -0400 [thread overview]
Message-ID: <20080722044157.GA20787@sigill.intra.peff.net> (raw)
In-Reply-To: <7vtzeir68z.fsf@gitster.siamese.dyndns.org>
On Mon, Jul 21, 2008 at 07:40:28PM -0700, Junio C Hamano wrote:
> Actually, the situation is now even worse than I originally thought
> especially with Jeff's pager.<cmd> patch on 'master' recently. For
> example, you can screw yourself quite badly by forcing diff-files used in
> the scripts you run to page, defeating --exit-code option. Which means
Actually, you could _always_ do that with "git -p diff-files". Which is
obviously stupid, just as setting pager.diff-files is. In the reported
case, though, "status" is broken, which we now do by default. So no
stupidity required.
> (2) Then why are we even allowing to configure the plumbing to page?
1. Laziness. We just never marked which shouldn't be allowed to page.
But again, in this case, we have explicitly marked status as "this
should page" so I don't think this is a plumbing / porcelain thing.
Status fulfills both roles here (some people want it paged, because
they use it as porcelain, and some people want the exit code).
2. We don't always know all git commands. We execute user scripts as
"git foo", but we don't know what they do. Worse than that, we have
to commit our pager choice early because we might be exec'ing (but
this is somewhat of an artifact of the way the code is structured,
and not necessarily an impossible obstacle).
> Should we maintain a table of commands that we allow paging to be
> customized, and ignore pager.<cmd> for commands that are not in the list?
The patch below sets up the infrastructure, which is trivial. Note that
this _doesn't_ handle the case of "git -p status", because we have to
commit that choice at a different time (again, we might be able to
overcome that with a little code restructuring).
This marks diff-files as FORBID_PAGER; I will leave it to others to
fight about which commands should have it. But it doesn't make sense to
mark "status" since some people obviously _want_ the paging there.
> Which codepath should issue error messages when the user tries to break
> the system by saying "pager.diff-files = true"?
No error, but it is silently ignored. :)
---
diff --git a/git.c b/git.c
index 74ea0e6..72cadb5 100644
--- a/git.c
+++ b/git.c
@@ -210,6 +210,7 @@ const char git_version_string[] = GIT_VERSION;
* RUN_SETUP for reading from the configuration file.
*/
#define NEED_WORK_TREE (1<<2)
+#define FORBID_PAGER (1<<3)
struct cmd_struct {
const char *cmd;
@@ -231,6 +232,8 @@ static int run_command(struct cmd_struct *p, int argc, const char **argv)
use_pager = check_pager_config(p->cmd);
if (use_pager == -1 && p->option & USE_PAGER)
use_pager = 1;
+ if (use_pager == 1 && p->option & FORBID_PAGER)
+ use_pager = 0;
commit_pager_choice();
if (p->option & NEED_WORK_TREE)
@@ -286,7 +289,7 @@ static void handle_internal_command(int argc, const char **argv)
{ "count-objects", cmd_count_objects, RUN_SETUP },
{ "describe", cmd_describe, RUN_SETUP },
{ "diff", cmd_diff },
- { "diff-files", cmd_diff_files, RUN_SETUP },
+ { "diff-files", cmd_diff_files, RUN_SETUP | FORBID_PAGER },
{ "diff-index", cmd_diff_index, RUN_SETUP },
{ "diff-tree", cmd_diff_tree, RUN_SETUP },
{ "fast-export", cmd_fast_export, RUN_SETUP },
next prev parent reply other threads:[~2008-07-22 4:43 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-21 23:13 git status in clean working dir David Bremner
2008-07-22 2:30 ` Junio C Hamano
2008-07-22 2:36 ` Abhijit Menon-Sen
2008-07-22 2:40 ` Junio C Hamano
2008-07-22 2:48 ` Junio C Hamano
2008-07-22 4:44 ` Jeff King
2008-07-22 4:52 ` Jeff King
2008-07-22 11:24 ` Johannes Schindelin
2008-07-22 4:41 ` Jeff King [this message]
2008-07-22 5:39 ` Mike Hommey
2008-07-22 6:06 ` Jeff King
2008-07-22 6:18 ` Mike Hommey
2008-07-22 6:46 ` Jeff King
2008-07-22 7:10 ` Jeff King
2008-07-22 7:12 ` [PATCH 1/2] run-command: add pre-exec callback Jeff King
2008-07-22 7:14 ` [PATCH 2/2] spawn pager via run_command interface Jeff King
2008-07-22 7:16 ` Jeff King
2008-07-22 7:31 ` Pierre Habouzit
2008-07-22 7:49 ` Jeff King
2008-07-22 7:48 ` Johannes Sixt
2008-07-22 7:50 ` Jeff King
2008-07-22 8:29 ` Johannes Sixt
2008-07-22 9:17 ` git status in clean working dir Junio C Hamano
2008-07-22 9:40 ` Jeff King
2008-07-22 14:10 ` David Bremner
2008-07-22 7:34 ` Johannes Sixt
2008-07-22 7:46 ` Jeff King
2008-07-22 7:54 ` Johannes Sixt
2008-07-24 6:56 ` Ask Bjørn Hansen
2008-07-24 16:54 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080722044157.GA20787@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=bremner@unb.ca \
--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.
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).