Re: [PATCH] introduce git root
- From
Christian Couder <christian.couder@gmail.com>
- Date
- Dec 10, 2014, 09:16 UTC
- Message-ID
- <CAP8UFD3U4BjAoebuL3dPGCqWM4T5y8GKUzhwgW=cx700hJd3zg@mail.gmail.com>
- In-Reply-To
- <xmqqoarcn0wm.fsf@gitster.dls.corp.google.com>
On Tue, Dec 9, 2014 at 7:17 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 86 quoted lines
> Jeff King <peff@peff.net> writes:
>
>> But the one place I do not agree is:
>>
>>> I think "sequence.editor" and "core.editor" are better because:
>>>
>>> - they use the same syntax as the config variables, so they are easier
>>> to remember and to discover, and
>>
>> I really don't like using "core.editor" here, because it has the same
>> name as a config variable, but it is _not_ the config variable. It
>> happens to use the config variable as one of the inputs to its
>> computation, but in many cases:
>>
>> git config core.editor
>>
>> and
>>
>> git var core.editor
>>
>> will produce different values. They are entirely different namespaces.
>> Using the same syntax and name seems unnecessarily confusing to me.
>
> I think this is a valid concern.
>
> It is a tangent, the current definition of "git_editor" helper reads
> like this:
>
> git_editor() {
> if test -z "${GIT_EDITOR:+set}"
> then
> GIT_EDITOR="$(git var GIT_EDITOR)" || return $?
> fi
>
> eval "$GIT_EDITOR" '"$@"'
> }
>
> If "git var editor" were to compute a reasonable value from the
> various user settings, and because GIT_EDITOR is among the sources
> of user settings, I wonder if the surrounding "if test -z then...fi"
> should be there.
>
> The pager side seems to do (halfway) "the right thing":
>
> git_pager() {
> if test -t 1
> then
> GIT_PAGER=$(git var GIT_PAGER)
> else
> GIT_PAGER=cat
> fi
> : ${LESS=-FRX}
> : ${LV=-c}
> export LESS LV
>
> eval "$GIT_PAGER" '"$@"'
> }
>
> The initial "test -t 1" is "we do not page to non-terminal", but we
> ask "git var" to take care of PAGER/GIT_PAGER fallback/precedence.
>
> It is tempting to argue that "we do not page to non-terminal" should
> also be part of "various user settings" for "git var" to take into
> account and fold this "if test -t 1...then...else...fi" also into
> "git var", but because a typical command line "git var" will be used
> on would look like this:
>
> GIT_PAGER=$(git var pager)
> eval "$GIT_PAGER" ...
>
> with the standard output stream of "git var" not connected to
> terminal, that would not fly very well, and I am not sure what
> should be done about it.
>
> This is another tangent that comes back to the original "how to name
> them?" question, but I wonder if a convention like this would work.
>
> * When asking for a feature (e.g. "what editor to use"), if there
> is a git-specific environment variable that can be set to
> override all other settings (e.g. "$GIT_EDITOR" trumps "$EDITOR"
> environment or "core.editor" configuration), "git var" can be
> queried with the name of that "strong" environment variable.
>
> * All other features without such a strong environment variables
> should not be spelled as if there is such an environment variable
> the user can set in order to avoid confusion.Does that mean that we would also have the following:
- git var GIT_DIR - git var GIT_EXEC_PATH - git var GIT_HTML_PATH - git var GIT_WORK_TREE - git var GIT_PREFIX ...
but not:
- git var GIT_SHARED_INDEX_PATH - git var GIT_TOP_LEVEL - git var GIT_CDUP
?
For the above 3 variables we would have:
- git var shared-index-path - git var top-level - git var cdup
And then what if we add the GIT_SHARED_INDEX_PATH env variable for example? Would we need to deprecate "git var shared-index-path"?
We also would have:
- git var GIT_EDITOR
but:
- git var web-browser (or "git var web.browser" like the config option?)
And when we add a GIT_WEB_BROWSER or GIT_BROWSER env variable, we deprecate "git var web-browser" (or "git var web.browser"?)
I doesn't look like user and future friendly to me, but maybe I misunderstood something.
Thanks, Christian.