git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Dragan Simic <dsimic@manjaro.org>
To: Christoph Anton Mitterer <calestyo@scientia.org>
Cc: git@vger.kernel.org
Subject: Re: why does git set X in LESS env var?
Date: Fri, 13 Oct 2023 17:00:44 +0200	[thread overview]
Message-ID: <2bbfc823d05434b63ef3e119df106d4e@manjaro.org> (raw)
In-Reply-To: <48ff9c2ac262cec32ab4681e8417413488278294.camel@scientia.org>

On 2023-10-13 15:45, Christoph Anton Mitterer wrote:
> On Fri, 2023-10-13 at 06:43 +0200, Dragan Simic wrote:
>> Actually, that would be wrong.  If someone sets $LESS or $PAGER (or
>> $GIT_PAGER, more specifically), it's up to the utility that invokes
>> the pager internally not to override the user preferences configured
>> through these environment variables.  That's how everyone can 
>> customize
>> the pager behavior.
> 
> Well, but if its clear that the output would otherwise be garbage (e.g.
> because -R is missing).

Well, it's the basic principle of "garbage in, garbage out".  If there's 
something wrong with the contents of the environment variables, that's 
simply the way the user configured it, and it's only their job to get it 
right.

> In any case right now we have the situation that a user cannot just
> easily set LESS in his environment, with a minimum set of options, and
> git's use of less will continue flawlessly out of the box, as the -R
> would be missing.

Let me repeat that it isn't the job of git or any other pager-enabled 
utility to fix the user-defined environment.  Otherwise, the user 
actually wouldn't be able to make their choice freely.

>> Again, not the way the whole thing with pagination works.  If someone
>> sets their environment variables wrong, it's simply the way they want
>> it, and it isn't anyone else's business to attempt fixing it
>> automatically.
> 
> Well, I wouldn't agree with that.
> LESS foremost a env var to configure less (surprise ^^).
> 
> If git (or anyone else) uses less internally, e.g. because they don't
> want to implement their own pager, fine... but then they cannot just
> blindly assume that LESS is set only for git's (or any other tool's
> needs).

You seem to be missing the presence of other enviroment variables, 
namely $GIT_PAGER, which I already described in detail in my previous 
reply.  I'd appreciate if you'd read that description in detail, and 
possibly test it a bit.

> So I'd say the proper way is rather that any such tool makes sure, that
> any options strictly required as set no matter what. Just as e.g. delta
> does.

Again, that's simply wrong and defeats the user's freedom of choice.

>> Well, fragile or not, that's the way it works.  It has its downsides
>> for
>> sure, but it's all about having each utility handle the environment
>> carefully and document it in its man page(s), so the users can also
>> carefully craft the values of their customized environment variables.
> 
> Sure, but from a user's view, the use of less (or anything else) within
> git is conceptually completely opaque.

Actually, it isn't, because there are $LESS, $PAGER and $GIT_PAGER 
environment variables to customize the behavior.

> In less' manpage LESS isn't documented as "oh and you must make sure -R
> is included or otherwise git will break"...

Quite frankly, it would be silly to expect the less(1) man page to 
mention something about git(1).

>> $LESS can be seen as a global set of the common options for less(1),
> 
> o.O ... but, as I've described, one cannot really use it as that:
> 
> If I globally set e.g. LESS="F" because my desire is to make less
> always exit as soon as the file fits on a screen, which I think is a
> reasonable thing to do, git would no longer add "R" and output would
> break.

Again, you seem not to understand well the distinction between the 
global settings (i.e. $LESS and $PAGER) and the utility-specific 
settings (e.g. $GIT_PAGER).  Or you maybe simply refuse to understand 
it, I don't know.

>> You don't have to define an alias, there's $GIT_PAGER for that
>> purpose, as I already explained above.
> 
> Well, yes... and as I've said before, one could also solve it via
> git_config... but the problem stays the same... as soon as someone
> wants to use LESS as global less options just as you described it
> yourself, git will no longer worker properly because of the missing -R.
> 
> And actually if one would use GIT_PAGER one would again defeat the
> purpose of a allegedly global options LESS, because unless one does
> something like GIT_PAGER="${LESS}R" it wouldn't see any changes made to
> LESS.

Let me clarify that the contents of $LESS is applied by less(1) 
internally, so the final runtime configuration for less(1) is a sum of 
the configurations made available through the $LESS and $PAGER (or 
$GIT_PAGER) environment variables.  It's a rather powerful approach, if 
used properly.

>> Moreover, the whole idea of the various utilities touching the $LESS
>> variable internally is to provide sane defaults to the users that
>> don't
>> configure $LESS, $PAGER, etc. on their own.
> 
> Then I don't see what the big problem would be to just do it via a
> command argument - if someone really has ever some reasons to remove --
> RAW‐CONTROL‐CHARS from the command options when less is invoked via git
> ... then he could still go into git_config and set that manually.
> 
> But it would seem to me that the overall handling would be much more
> what one expects, than when doing the same via LESS.

Again, adding or modifying any command-line arguments by git itself 
would defeat the purpose of the environment variables and prevent the 
users from making their choice of the pagination configuration freely.

>> I don't know what delta is and how it actually paginates its outputs,
>> but it should follow the rules of the environment-based pager
>> configuration that I described in detail above.
> 
> Well, AFAIU, it doesn't and for good reasons :-)

In that case, delta does it wrong, and I hope you understand why.

> Anyway... I think all necessary things have been said and this thread
> has grown far to large with only semi-related stuff... so thanks for
> all the replies why git uses "-X".

I hope all this was useful to you.  It was useful to me. :)


  reply	other threads:[~2023-10-13 15:01 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-11 22:19 why does git set X in LESS env var? Christoph Anton Mitterer
2023-10-11 22:23 ` Junio C Hamano
2023-10-11 22:26   ` Christoph Anton Mitterer
2023-10-11 22:51     ` Dragan Simic
2023-10-11 23:16       ` Christoph Anton Mitterer
2023-10-11 23:29         ` Dragan Simic
2023-10-11 23:43           ` Christoph Anton Mitterer
2023-10-12  0:06             ` Dragan Simic
2023-10-12  0:22               ` Christoph Anton Mitterer
2023-10-12  0:31                 ` Dragan Simic
2023-10-12  1:39                   ` Christoph Anton Mitterer
2023-10-12  5:46                     ` Dragan Simic
2023-10-12 20:23                       ` Christoph Anton Mitterer
2023-10-12 21:15                         ` Dragan Simic
2023-10-12 21:48                           ` Christoph Anton Mitterer
2023-10-12 22:36                             ` Dragan Simic
2023-10-12 23:06                               ` Christoph Anton Mitterer
2023-10-13  4:43                                 ` Dragan Simic
2023-10-13 13:45                                   ` Christoph Anton Mitterer
2023-10-13 15:00                                     ` Dragan Simic [this message]
2023-10-12  0:04   ` Jeff King
2023-10-12  0:16     ` Dragan Simic
2023-10-12  1:39     ` Junio C Hamano
2023-10-12  5:30       ` Dragan Simic
2023-10-12 16:19         ` Junio C Hamano
2023-10-13 20:12           ` Dragan Simic
     [not found]             ` <cfbe174f-23ac-4a35-8db4-66bdfdfdc14e@gmail.com>
2023-11-02  6:01               ` Thomas Guyot
2023-11-02  6:14                 ` Dragan Simic
2023-11-02  6:48               ` Dragan Simic
2023-11-02 13:19                 ` Thomas Guyot
2023-11-02 14:19                   ` Dragan Simic
2023-11-03 11:47                     ` Thomas Guyot
2023-11-03 15:28                       ` Andy Koppe
2023-11-03 18:38                         ` Dragan Simic
2023-11-03 18:22                       ` Dragan Simic
2023-11-06  3:47                     ` Dragan Simic
2024-03-21 15:53                       ` Dragan Simic
2023-10-12  3:54     ` Christoph Anton Mitterer
2023-10-12  5:57       ` Dragan Simic

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=2bbfc823d05434b63ef3e119df106d4e@manjaro.org \
    --to=dsimic@manjaro.org \
    --cc=calestyo@scientia.org \
    --cc=git@vger.kernel.org \
    /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).