Re: [PATCH 1/1] git-gui (Windows): use git-bash.exe if it is available

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Fri, 27 Sep 2019, Pratyush Yadav wrote:

> On 26/09/19 10:46AM, Thomas Klaeger via GitGitGadget wrote:
> > From: Thomas Klaeger <thklaeger@xxxxxxxxx>
> >
> > Git for Windows 2.x ships with an executable that starts the Git Bash
> > with all the environment variables and what not properly set up. It is
> > also adjusted according to the Terminal emulator option chosen when
> > installing Git for Windows (while `bash.exe --login -i` would always
> > launch with Windows' default console).
> >
> > So let's use that executable (usually C:\Program Files\Git\git-bash.exe)
> > instead of `bash.exe --login -i` if its presence was detected.
> >
> > This fixes https://github.com/git-for-windows/git/issues/490
> >
> > Signed-off-by: Thomas Kläger <thomas.klaeger@xxxxxx>
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx>
> > ---
> >  git-gui.sh | 12 ++++++++++--
> >  1 file changed, 10 insertions(+), 2 deletions(-)
> >
> > diff --git a/git-gui.sh b/git-gui.sh
> > index f9b323abff..5a1bfd736e 100755
> > --- a/git-gui.sh
> > +++ b/git-gui.sh
> > @@ -2700,10 +2700,18 @@ if {![is_bare]} {
> >  }
>
> This hunk is kind of hard to understand. I'm writing what I make of it.
> Please correct me if I read it wrong.
>
> Since this is a 4 year old commit not even authored by you, you might
> not have all the answers. That's OK. But I'd still like to point these
> things out. I do have a question at the end so please read the entire
> thing :)
>
> >  if {[is_Windows]} {
> > +	# Use /git-bash.exe if available
> > +	set normalized [file normalize $::argv0]
>
> argv0 would be the location of git-gui. We get an absolute path for the
> git-gui executable in the variable normalized.
>
> > +	regsub "/mingw../libexec/git-core/git-gui$" \
> > +		$normalized "/git-bash.exe" cmdLine
>
> This finds the install location of git-bash by doing a string
> substitution. I'm assuming the path before /mingw.. is the installation
> directory of git, and so that's where git-bash would reside. We put that
> directory in cmdLine.
>
> Nitpick: most of the code here uses snake case. So s/cmdLine/cmd_line/
>
> > +	if {$cmdLine != $normalized && [file exists $cmdLine]} {
>
> Why the $cmdLine != $normalized? When would they be equal? The string
> substitution should always change $cmdLine.

Except when Git GUI is installed in an unexpected location. This check
is purely defensive programming.

>
> > +		set cmdLine [list "Git Bash" $cmdLine &]
> > +	} else {
> > +		set cmdLine [list "Git Bash" bash --login -l &]
> > +	}
> >  	.mbar.repository add command \
> >  		-label [mc "Git Bash"] \
> > -		-command {eval exec [auto_execok start] \
> > -					  [list "Git Bash" bash --login -l &]}
> > +		-command {eval exec [auto_execok start] $cmdLine}
> >  }
> >
> >  if {[is_Windows] || ![is_bare]} {
>
> The way of finding the path of git-bash is very hacky and would break as
> soon as there are any changes in the install locations. Plus, it is not
> at all easy to understand what's going on at first look.
>
> Is there no better way of finding out git-bash's location? Is there
> something like the PATH environment variable in Windows that we can use
> to locate git-bash's executable? I have never developed in Windows so I
> have no idea how things work there.
>
> On Linux for example, the exec() family of functions look into the PATH
> environment variable for the executable, so it is a pretty clean
> mechanism to execute programs.

That's not an option on Windows. `git-bash.exe` is not intended to be in
the `PATH`, specifically not.

The implemented method is the best approach we found to determine the
location of `git-bash.exe`.

Ciao,
Johannes

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux