git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Martin Ågren" <martin.agren@gmail.com>
To: Jeff King <peff@peff.net>
Cc: "Git Mailing List" <git@vger.kernel.org>,
	"Jonathan Nieder" <jrnieder@gmail.com>,
	"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
	"Brandon Williams" <bmwill@google.com>
Subject: Re: [PATCH 0/7] tag: more fine-grained pager-configuration
Date: Tue, 11 Jul 2017 15:50:39 +0200	[thread overview]
Message-ID: <CAN0heSqN6SJ_dppbYEDYVs+pSzVdLvLUDL4_VSNn79ro6c_8=g@mail.gmail.com> (raw)
In-Reply-To: <20170711101942.h2uwxtgzvgguzivu@sigill.intra.peff.net>

On 11 July 2017 at 12:19, Jeff King <peff@peff.net> wrote:
> On Mon, Jul 10, 2017 at 11:55:13PM +0200, Martin Ågren wrote:
>
>> Using, e.g., `git -c pager.tag tag -a new-tag` results in errors such
>> as "Vim: Warning: Output is not to a terminal" and a garbled terminal.
>> A user who makes use of `git tag -a` and `git tag -l` will probably
>> choose not to configure `pager.tag` or to set it to "no", so that `git
>> tag -a` will actually work, at the cost of not getting the pager with
>> `git tag -l`.
>
> Right, I think we are all agreed that "pager.tag" as it is now is
> essentially worthless.
>
> If I understand your series correctly, though, it adds pager.tag.list
> but leaves "pager.tag" behaving more or less the same. It's good that we
> now have a way for a user to do the thing they actually want, but it
> feels like we're leaving pager.tag behind as a booby-trap.
>
> Should we disable it entirely (or only respect it in list mode)?
>
> At which point, I wonder if we actually need pager.tag.list at all.
> Slicing up the namespace further would be valuable if there were a
> command which had two pager-worthy modes, and somebody might want to
> enable the pager for one but not the other. But it seems like most
> commands in this boat (e.g., tag, branch, stash) really have two modes:
> listing things or creating things.
>
> Would it makes sense to just have git-tag respect pager.tag in listing
> mode, and otherwise ignore it completely?

Yes. I doubt anyone would notice, and no-one should mind with the
change (famous last words).

It does mean there's a precedence for individual commands to get to
choose when to honor pager.foo. If more such exceptions are added, at
some point, some command will learn to ignore pager.foo in some
particular situation and someone will consider it a regression.

> One nice side effect is that it keeps the multi-level pager.X.Y
> namespace clear. We've talked about transitioning to allow:
>
>   [pager "foo"]
>   enable = true
>   command = some-custom-pager
>
> to configure aspects of the pager separately for git-foo. This has two
> benefits:
>
>   1. Syntactically, it allows configuration for commands whose names
>      aren't valid config keys.
>
>   2. It would allow setting a command with "enable=false", so that "git
>      foo" did not paginate, but "git -p foo" paginated with a custom
>      command.
>
> Those are admittedly minor features. And assuming we don't go crazy with
> the multi-level names, we could have "pager.tag.list" live alongside
> "pager.tag.command". So it's not really an objection, so much as wonder
> out loud whether we can keep this as simple as possible.

Well, I respect your hunch about .enable and .command and I certainly
don't want to take things in a direction that makes that approach less
clean. You have convinced me that I will instead try to teach git tag
to be more clever about when to use the pager, at least to see what
that looks like.

Let's call such a "git tag" the "future git tag". Just to convince
myself I've thought through the implications -- how would
pager.tag.enable=true affect that future git tag? Would it be fair to
say that enable=false means "definitely don't start the pager (unless
--paginate)" and that enable=true means "feel free to use it (unless
--no-paginate)"? The future git tag would default to using
enable=true. Would --paginate also be "feel free to use it", or rather
"the pager must be used"?

At some point, I thought about "true"/"false"/"maybe", where "maybe"
would be what the future git tag implements. Of course, there's a fair
chance not everyone will agree what exactly should be paged with
"maybe". So it's back to adding various knobs. ;)

Anyway, this is more my thinking out loud. I'll drop pager.tag.list in
v2 and will instead make pager.tag more clever. That should force me
to think through this some more.

>> This is an attempt to implement something like that. I decided to let
>> `pager.tag.list` fall back to `pager.tag` before falling back to "on".
>> The default for `pager.tag` is still "off". I can see how that might
>> seem confusing. However, my argument is that it would be awkward for
>> `git tag -l` to ignore `pager.tag` -- we are after all running a
>> subcommand of `git tag`. Also, this avoids a regression for someone
>> who has set `pager.tag` and uses `git tag -l`.
>
> Yeah, I agree that turning "pager.tag" into a complete noop is probably
> a bad idea. But if we made it a silent noop for the non-list cases, that
> would be OK (and the hypothetical user who set it to make `git tag -l`
> work would see a strict improvement; they'd still get their paging but
> not the weird breakage with non-list modes). And I think that applies
> whether we have a pager.tag.list in addition or not.

Good thinking.

Thanks a lot for your comments. I appreciate it.

Martin

  reply	other threads:[~2017-07-11 13:50 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-10 21:55 [PATCH 0/7] tag: more fine-grained pager-configuration Martin Ågren
2017-07-10 21:55 ` [PATCH 1/7] api-builtin.txt: document SUPPORT_SUPER_PREFIX Martin Ågren
2017-07-10 22:50   ` Brandon Williams
2017-07-11  6:32     ` Martin Ågren
2017-07-11 18:23       ` Brandon Williams
2017-07-10 21:55 ` [PATCH 2/7] git.c: let builtins opt for handling `pager.foo` themselves Martin Ågren
2017-07-11 10:24   ` Jeff King
2017-07-11 13:46     ` Martin Ågren
2017-07-11 13:54       ` Jeff King
2017-07-10 21:55 ` [PATCH 3/7] git.c: provide setup_auto_pager() Martin Ågren
2017-07-11 10:37   ` Jeff King
2017-07-11 13:47     ` Martin Ågren
2017-07-10 21:55 ` [PATCH 4/7] t7006: add tests for how git tag paginates Martin Ågren
2017-07-10 21:55 ` [PATCH 5/7] tag: handle `pager.tag`-configuration within the builtin Martin Ågren
2017-07-11 10:38   ` Jeff King
2017-07-10 21:55 ` [PATCH 6/7] tag: make git tag -l consider new config `pager.tag.list` Martin Ågren
2017-07-11 10:41   ` Jeff King
2017-07-11 13:48     ` Martin Ågren
2017-07-10 21:55 ` [PATCH 7/7] tag: make git tag -l use pager by default Martin Ågren
2017-07-11 10:44   ` Jeff King
2017-07-10 22:42 ` [PATCH 0/7] tag: more fine-grained pager-configuration Junio C Hamano
2017-07-11 10:47   ` Jeff King
2017-07-11 16:05     ` Junio C Hamano
2017-07-12  7:29   ` Martin Ågren
2017-07-11 10:19 ` Jeff King
2017-07-11 13:50   ` Martin Ågren [this message]
2017-07-11 14:08     ` Jeff King
2017-07-17 20:10 ` [PATCH v2 00/10] tag: only respect `pager.tag` in list-mode Martin Ågren
2017-07-17 20:10   ` [PATCH v2 01/10] builtin.h: take over documentation from api-builtin.txt Martin Ågren
2017-07-17 20:10   ` [PATCH v2 02/10] builtin.h: format documentation-comment properly Martin Ågren
2017-07-17 20:10   ` [PATCH v2 03/10] builtin.h: document SUPPORT_SUPER_PREFIX Martin Ågren
2017-07-17 20:10   ` [PATCH v2 04/10] git.c: let builtins opt for handling `pager.foo` themselves Martin Ågren
2017-07-17 20:10   ` [PATCH v2 05/10] git.c: provide setup_auto_pager() Martin Ågren
2017-07-31  3:34     ` Jeff King
2017-07-31 16:32       ` Junio C Hamano
2017-07-17 20:10   ` [PATCH v2 06/10] t7006: add tests for how git tag paginates Martin Ågren
2017-07-31  3:38     ` Jeff King
2017-07-31 16:37       ` Junio C Hamano
2017-07-31 17:50         ` Martin Ågren
2017-07-17 20:10   ` [PATCH v2 07/10] tag: handle `pager.tag`-configuration within the builtin Martin Ågren
2017-07-17 20:10   ` [PATCH v2 08/10] tag: respect `pager.tag` in list-mode only Martin Ågren
2017-07-31  3:40     ` Jeff King
2017-07-17 20:10   ` [PATCH v2 09/10] tag: change default of `pager.tag` to "on" Martin Ågren
2017-07-17 20:10   ` [PATCH v2 10/10] git.c: ignore pager.* when launching builtin as dashed external Martin Ågren
2017-07-31  3:45     ` Jeff King
2017-07-31 17:42       ` Martin Ågren
2017-07-18 19:13   ` [PATCH v2 00/10] tag: only respect `pager.tag` in list-mode Junio C Hamano
2017-07-20 22:27   ` Junio C Hamano
2017-07-23 18:17     ` Martin Ågren
2017-07-31  3:46       ` Jeff King
2017-07-31 17:44         ` Martin Ågren
2017-07-31 17:45           ` Jeff King
2017-07-31 20:10             ` Junio C Hamano
2017-08-02 19:40   ` [PATCH v3 0/7] " Martin Ågren
2017-08-02 19:40     ` [PATCH v3 1/7] builtin.h: take over documentation from api-builtin.txt Martin Ågren
2017-08-03 17:44       ` Junio C Hamano
2017-08-04  4:18         ` Martin Ågren
2017-08-04 16:00           ` Junio C Hamano
2017-08-04 16:42             ` Martin Ågren
2017-08-02 19:40     ` [PATCH v3 2/7] git.c: let builtins opt for handling `pager.foo` themselves Martin Ågren
2017-08-02 19:40     ` [PATCH v3 3/7] git.c: provide setup_auto_pager() Martin Ågren
2017-08-02 19:40     ` [PATCH v3 4/7] t7006: add tests for how git tag paginates Martin Ågren
2017-08-02 19:40     ` [PATCH v3 5/7] tag: respect `pager.tag` in list-mode only Martin Ågren
2017-08-02 19:40     ` [PATCH v3 6/7] tag: change default of `pager.tag` to "on" Martin Ågren
2017-08-02 19:40     ` [PATCH v3 7/7] git.c: ignore pager.* when launching builtin as dashed external Martin Ågren
2017-08-03 18:20     ` [PATCH v3 0/7] tag: only respect `pager.tag` in list-mode Junio C Hamano
2017-08-03 19:29     ` Jeff King
2017-08-04  4:21       ` Martin Ågren
2017-08-04  4:59         ` 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='CAN0heSqN6SJ_dppbYEDYVs+pSzVdLvLUDL4_VSNn79ro6c_8=g@mail.gmail.com' \
    --to=martin.agren@gmail.com \
    --cc=bmwill@google.com \
    --cc=git@vger.kernel.org \
    --cc=jrnieder@gmail.com \
    --cc=pclouds@gmail.com \
    --cc=peff@peff.net \
    /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).