Re: [PATCH] git-gui: msys2 compatibility patches
- From
Konstantin Podsvirov <konstantin@podsvirov.pro>
- Date
- Apr 27, 2020, 21:33 UTC
- Message-ID
- <952341588022066@mail.yandex.ru>
- In-Reply-To
- <20200427194546.7ce4z2ooe4jaab5w@yadavpratyush.com>
27.04.2020, 22:48, "Pratyush Yadav" <me@yadavpratyush.com>:
Show 11 quoted lines
> 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.
Show 19 quoted lines
>> 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.
Show 55 quoted lines
>> 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.
Show 6 quoted lines
> 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.
Show 10 quoted lines
>> }
>> 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.
Show 24 quoted lines
>> 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.
Show 11 quoted lines
>> - }
>> - } 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.
Show 7 quoted lines
>> proc is_enabled {option} {
>> global enabled_options
>> if {[catch {set on $enabled_options($option)}]} {return 0}
>
> --
> Regards,
> Pratyush YadavWhat is the further course of action?
-- Regards, Konstantin Podsvirov