From: Konstantin Podsvirov <konstantin@podsvirov.pro>
To: Pratyush Yadav <me@yadavpratyush.com>,
Konstantin Podsvirov via GitGitGadget <gitgitgadget@gmail.com>
Cc: "git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: [PATCH] git-gui: msys2 compatibility patches
Date: Tue, 28 Apr 2020 00:33:53 +0300 [thread overview]
Message-ID: <952341588022066@mail.yandex.ru> (raw)
In-Reply-To: <20200427194546.7ce4z2ooe4jaab5w@yadavpratyush.com>
27.04.2020, 22:48, "Pratyush Yadav" <me@yadavpratyush.com>:
> Hi Konstantin,
>
> Thanks for the patch, and sorry for the late reply.
>
> On 14/04/20 09:45PM, Konstantin Podsvirov via GitGitGadget wrote:
>> From: Konstantin Podsvirov <konstantin@podsvirov.pro>
>>
>> Allow using `git gui` command via MSYS2's MINGW32/64 subsystems (apropriate shells).
>
> I think this should be the commit subject, instead of "msys2
> compatibility patches".
I do not mind.
>> Just install apropriate `tk` package:
>>
>> ```bash
>> user@host MINGW32 ~
>> pacman -S mingw-w64-i686-tk
>> ```
>>
>> or
>>
>> ```bash
>> user@host MINGW64 ~
>> pacman -S mingw-w64-x86_64-tk
>> ```
>>
>> For more info see: https://github.com/msys2/MSYS2-packages/pull/1912
>
> Please don't just link to an external website. Put the explanation there
> in the commit message. Explain what the problem was, and how this patch
> fixes it.
The startup script everywhere operates on Unix paths, but on Windows they are incomplete, and the interpreter expects full native paths.
>> Signed-off-by: Konstantin Podsvirov <konstantin@podsvirov.pro>
>> ---
>> git-gui.sh | 52 ++++++++++++++++++++++++++++++----------------------
>> 1 file changed, 30 insertions(+), 22 deletions(-)
>>
>> diff --git a/git-gui.sh b/git-gui.sh
>> index 4610e4ca72a..512f4f121aa 100755
>> --- a/git-gui.sh
>> +++ b/git-gui.sh
>> @@ -44,6 +44,28 @@ if {[catch {package require Tcl 8.5} err]
>>
>> catch {rename send {}} ; # What an evil concept...
>>
>> +######################################################################
>> +##
>> +## platform detection
>> +
>> +set _iscygwin {}
>> +
>> +proc is_Cygwin {} {
>> + global _iscygwin
>> + if {$_iscygwin eq {}} {
>> + if {$::tcl_platform(platform) eq {windows}} {
>> + if {[catch {set p [exec cygpath --windir]} err]} {
>> + set _iscygwin 0
>> + } else {
>> + set _iscygwin 1
>> + }
>> + } else {
>> + set _iscygwin 0
>> + }
>> + }
>> + return $_iscygwin
>> +}
>> +
>> ######################################################################
>> ##
>> ## locate our library
>> @@ -51,7 +73,14 @@ catch {rename send {}} ; # What an evil concept...
>> if { [info exists ::env(GIT_GUI_LIB_DIR) ] } {
>> set oguilib $::env(GIT_GUI_LIB_DIR)
>> } else {
>> - set oguilib {@@GITGUI_LIBDIR@@}
>> + if {[is_Cygwin]} {
>> + set oguilib [exec cygpath \
>> + --windows \
>> + --absolute \
>> + @@GITGUI_LIBDIR@@]
>> + } else {
>> + set oguilib {@@GITGUI_LIBDIR@@}
>> + }
>
> This would convert the Windows style path to a Unix style path if we are
> running in Cygwin, right? This is what I assume the heart of the problem
> is.
It is true exactly the opposite.
> Style nitpick: something like this would probably be better:
>
> set oguilib {@@GITGUI_LIBDIR@@}
> if {[is_Cygwin]} {
> ...
> }
Looks good.
> This makes it clear that Cygwin is the exception. For all other cases,
> we want to use @@GITGUI_LIBDIR@@ directly.
Yes.
>> }
>> set oguirel {@@GITGUI_RELATIVE@@}
>> if {$oguirel eq {1}} {
>> @@ -163,7 +192,6 @@ set _isbare {}
>> set _gitexec {}
>> set _githtmldir {}
>> set _reponame {}
>> -set _iscygwin {}
>
> Why move the initialization?
To use this above when setting `oguilib` variable.
>> set _search_path {}
>> set _shellpath {@@SHELL_PATH@@}
>>
>> @@ -266,26 +294,6 @@ proc is_Windows {} {
>> return 0
>> }
>>
>> -proc is_Cygwin {} {
>> - global _iscygwin
>> - if {$_iscygwin eq {}} {
>> - if {$::tcl_platform(platform) eq {windows}} {
>> - if {[catch {set p [exec cygpath --windir]} err]} {
>> - set _iscygwin 0
>> - } else {
>> - set _iscygwin 1
>> - # Handle MSys2 which is only cygwin when MSYSTEM is MSYS.
>> - if {[info exists ::env(MSYSTEM)] && $::env(MSYSTEM) ne "MSYS"} {
>> - set _iscygwin 0
>> - }
>
> I'm afraid I don't understand this hunk. I don't use Windows, and don't
> completely understand the difference between cygwin, msys, etc. Could
> you please explain further why this check is removed? Are there any
> negative side-effects?
To use `git gui` we need `tk` (wish), but `tk` (wish) can be available only when MSYSTEM is equal to MINGW32 or MINGW64.
>> - }
>> - } else {
>> - set _iscygwin 0
>> - }
>> - }
>> - return $_iscygwin
>> -}
>> -
>
> Why move the function? Can't this and the _iscygwin initialization just
> stay in their place? It will make the diff much easier to read.
To use this above when setting `oguilib` variable.
>> proc is_enabled {option} {
>> global enabled_options
>> if {[catch {set on $enabled_options($option)}]} {return 0}
>
> --
> Regards,
> Pratyush Yadav
What is the further course of action?
--
Regards,
Konstantin Podsvirov
next prev parent reply other threads:[~2020-04-27 21:39 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-14 21:45 [PATCH] git-gui: msys2 compatibility patches Konstantin Podsvirov via GitGitGadget
2020-04-27 19:45 ` Pratyush Yadav
2020-04-27 21:33 ` Konstantin Podsvirov [this message]
2020-05-05 12:28 ` Pratyush Yadav
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=952341588022066@mail.yandex.ru \
--to=konstantin@podsvirov.pro \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=me@yadavpratyush.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).