git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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 },

  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).