git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 0/7] tag: more fine-grained pager-configuration

From
Jeff King <peff@peff.net>
Date
Jul 11, 2017, 14:08 UTC
Message-ID
<20170711140801.ocbr44wktjjj44dq@sigill.intra.peff.net>
In-Reply-To
<CAN0heSqN6SJ_dppbYEDYVs+pSzVdLvLUDL4_VSNn79ro6c_8=g@mail.gmail.com>
On Tue, Jul 11, 2017 at 03:50:39PM +0200, Martin Ågren wrote:
Show 10 quoted lines
> > 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.

Yes, perhaps. One could even argue that "git tag foo" is OK to page and somebody would consider it a regression not to respect pager.tag. It seems useless to me, but at least it's not totally broken like "git tag -a foo" is.

But I find it pretty unlikely, as it doesn't produce copious output. I'd worry more about eventually finding a command with two copious-output modes, and somebody wants to distinguish between them. If we can't come up with a plausible example now, I'm inclined to deal with it if and when it ever comes up. Right now I just don't want to paint ourselves into a corner, and I think we can always add more config later (e.g., tag.pageFooCommand=true or something; that's not great, but I'm mostly betting that it will never come up).

Show 5 quoted lines
> 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.

Thanks. I was the original proponent of "pager.tag.list", and only after reading your series today did I think "gee, this seems unnecessarily complex". So it's entirely possible I'm missing a corner case that you may uncover through discussion or experimenting.

Show 8 quoted lines
> 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"?
I think the rules would be:
  1. If --paginate is given, do that. Likewise for --no-pager.
  2. Otherwise, respect tag.pager.enable if it is set.
  3. Otherwise, use the built-in default.
  4. Any time the pager is run, respect tag.pager.command if it is set.
And then there are two optional bits:
  2a. If tag.pager is set to a boolean, behave as if tag.pager.enable is
      set to the same boolean. If it's set to a string, behave as if
      tag.pager.enable is set to "true", and tag.pager.command is set to
      the string. That should give us backwards compatibility.
  2b. If tag.pager.command is set but tag.pager.enable isn't, possibly we
      should assume that tag.pager.enable is set to "true". That makes
      the common case of "page and use this command" a single config
      block instead of two. It matters less for "tag" where paging would
      be the default.

So I think that what you asked above, but to be clear on the final question: --paginate should always be "must be used". And that meshes nicely with implementing it via the git.c wrapper, where it takes precedence way before we ever hit the setup_auto_pager() call.

-Peff
Previous: Martin ÅgrenNext: Martin Ågren
Message 27 of 69 in “tag: more fine-grained pager-configuration”
  1. 0/7 tag: more fine-grained pager-configurationMartin Ågren, Jul 10, 2017
  2. 1/7 api-builtin.txt: document SUPPORT_SUPER_PREFIXMartin Ågren, Jul 10, 2017
  3. Brandon WilliamsJul 10, 2017
  4. Martin ÅgrenJul 11, 2017
  5. Brandon WilliamsJul 11, 2017
  6. 2/7 git.c: let builtins opt for handling `pager.foo` themselvesMartin Ågren, Jul 10, 2017
  7. Jeff KingJul 11, 2017
  8. Martin ÅgrenJul 11, 2017
  9. Jeff KingJul 11, 2017
  10. 3/7 git.c: provide setup_auto_pager()Martin Ågren, Jul 10, 2017
  11. Jeff KingJul 11, 2017
  12. Martin ÅgrenJul 11, 2017
  13. 4/7 t7006: add tests for how git tag paginatesMartin Ågren, Jul 10, 2017
  14. 6/7 tag: make git tag -l consider new config `pager.tag.list`Martin Ågren, Jul 10, 2017
  15. Jeff KingJul 11, 2017
  16. Martin ÅgrenJul 11, 2017
  17. 5/7 tag: handle `pager.tag`-configuration within the builtinMartin Ågren, Jul 10, 2017
  18. Jeff KingJul 11, 2017
  19. 7/7 tag: make git tag -l use pager by defaultMartin Ågren, Jul 10, 2017
  20. Jeff KingJul 11, 2017
  21. Junio C HamanoJul 10, 2017
  22. Jeff KingJul 11, 2017
  23. Junio C HamanoJul 11, 2017
  24. Martin ÅgrenJul 12, 2017
  25. Jeff KingJul 11, 2017
  26. Martin ÅgrenJul 11, 2017
  27. Jeff KingJul 11, 2017
  28. 00/10 tag: only respect `pager.tag` in list-modeMartin Ågren, Jul 17, 2017
  29. 01/10 builtin.h: take over documentation from api-builtin.txtMartin Ågren, Jul 17, 2017
  30. 02/10 builtin.h: format documentation-comment properlyMartin Ågren, Jul 17, 2017
  31. 03/10 builtin.h: document SUPPORT_SUPER_PREFIXMartin Ågren, Jul 17, 2017
  32. 04/10 git.c: let builtins opt for handling `pager.foo` themselvesMartin Ågren, Jul 17, 2017
  33. 05/10 git.c: provide setup_auto_pager()Martin Ågren, Jul 17, 2017
  34. Jeff KingJul 31, 2017
  35. Junio C HamanoJul 31, 2017
  36. 06/10 t7006: add tests for how git tag paginatesMartin Ågren, Jul 17, 2017
  37. Jeff KingJul 31, 2017
  38. Junio C HamanoJul 31, 2017
  39. Martin ÅgrenJul 31, 2017
  40. 07/10 tag: handle `pager.tag`-configuration within the builtinMartin Ågren, Jul 17, 2017
  41. 08/10 tag: respect `pager.tag` in list-mode onlyMartin Ågren, Jul 17, 2017
  42. Jeff KingJul 31, 2017
  43. 09/10 tag: change default of `pager.tag` to "on"Martin Ågren, Jul 17, 2017
  44. 10/10 git.c: ignore pager.* when launching builtin as dashed externalMartin Ågren, Jul 17, 2017
  45. Jeff KingJul 31, 2017
  46. Martin ÅgrenJul 31, 2017
  47. Junio C HamanoJul 18, 2017
  48. Junio C HamanoJul 20, 2017
  49. Martin ÅgrenJul 23, 2017
  50. Jeff KingJul 31, 2017
  51. Martin ÅgrenJul 31, 2017
  52. Jeff KingJul 31, 2017
  53. Junio C HamanoJul 31, 2017
  54. 0/7 tag: only respect `pager.tag` in list-modeMartin Ågren, Aug 2, 2017
  55. 1/7 builtin.h: take over documentation from api-builtin.txtMartin Ågren, Aug 2, 2017
  56. Junio C HamanoAug 3, 2017
  57. Martin ÅgrenAug 4, 2017
  58. Junio C HamanoAug 4, 2017
  59. Martin ÅgrenAug 4, 2017
  60. 2/7 git.c: let builtins opt for handling `pager.foo` themselvesMartin Ågren, Aug 2, 2017
  61. 3/7 git.c: provide setup_auto_pager()Martin Ågren, Aug 2, 2017
  62. 4/7 t7006: add tests for how git tag paginatesMartin Ågren, Aug 2, 2017
  63. 5/7 tag: respect `pager.tag` in list-mode onlyMartin Ågren, Aug 2, 2017
  64. 6/7 tag: change default of `pager.tag` to "on"Martin Ågren, Aug 2, 2017
  65. 7/7 git.c: ignore pager.* when launching builtin as dashed externalMartin Ågren, Aug 2, 2017
  66. Junio C HamanoAug 3, 2017
  67. Jeff KingAug 3, 2017
  68. Martin ÅgrenAug 4, 2017
  69. Jeff KingAug 4, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.