After moving the dashed programs, including git-gui, to execdir
'libexec/git-core', we have problems running git-gui from
msysgit.
The following patch series solves the problems. I am not sure
however if it is the less intrusive solution. Maybe the series
needs further discussion before applying it. Personally, I think
the patches are good enough.
Note that you also need the branch 'spr/installer' in msysgit to
build an installer.
[PATCH 1/3] git-gui: Adapt discovery of oguilib to execdir 'libexec/git-core'
[PATCH 2/3] git-gui (Windows): Switch to relative discovery of oguilib
[PATCH 3/3] git-gui (Windows): Change wrapper to execdir 'libexec/git-core'
The new execdir has is two levels below the root directory, while
the old execdir 'bin' was only one level below. This commit
adapts the discovery of oguilib that uses relative paths
accordingly.
Signed-off-by: Steffen Prohaska <redacted>
---
git-gui/git-gui.sh | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
Instead of using an absolute path, git-gui can discover its
gui library using a relative path from execdir. We want to
use the relative path discovery on MinGW to avoid issues
with translation of absolute paths.
Signed-off-by: Steffen Prohaska <redacted>
---
git-gui/Makefile | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
git-gui needs bindir in PATH to be able to run 'git'. bindir
however is not necessarily in PATH if started directly through a
Windows shortcut. Therefore, we used to add the directory
git-gui is located in. But with the new 'libexec/git-core'
layout this directory is no longer identical to bindir.
This commit modifies the wrapper script to discover the bindir
and add it to PATH.
Signed-off-by: Steffen Prohaska <redacted>
---
git-gui/windows/git-gui.sh | 11 +++++++----
1 files changed, 7 insertions(+), 4 deletions(-)
From: Shawn O. Pearce <hidden> Date: 2016-06-15 22:45:03
Steffen Prohaska [off-list ref] wrote:
The new execdir has is two levels below the root directory, while
the old execdir 'bin' was only one level below. This commit
adapts the discovery of oguilib that uses relative paths
accordingly.
@@ -52,7 +52,9 @@ catch {rename send {}} ; # What an evil concept...setoguilib{@@GITGUI_LIBDIR@@}setoguirel{@@GITGUI_RELATIVE@@}if{$oguireleq{1}}{-setoguilib[filedirname[filedirname[filenormalize$argv0]]]+setoguilib[filedirname\+[filedirname\+[filedirname[filenormalize$argv0]]]]setoguilib[filejoin$oguilibsharegit-guilib]
Hmmph. This actually comes up incorrectly on my system. The issue
appears to be `git --exec-path` gives me $prefix/libexec/git-core,
and git-gui installs its library into $prefix/libexec/share, which
is wrong. It should have gone to $prefix/share.
I wonder if this is better. Your other two patches seem fine.
--8<--
[PATCH] git-gui: Correct installation of library to be $prefix/share
We always wanted the library for git-gui to install into the
$prefix/share directory, not $prefix/libexec/share. All of
the files in our library are platform independent and may
be reused across systems, like any other content stored in
the share directory.
Our computation of where our library should install to was broken
when git itself started installing to $prefix/libexec/git-core,
which was one level down from where we expected it to be.
Signed-off-by: Shawn O. Pearce <redacted>
---
Makefile | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
On Jul 27, 2008, at 11:24 PM, Shawn O. Pearce wrote:
Steffen Prohaska [off-list ref] wrote:
quoted
The new execdir has is two levels below the root directory, while
the old execdir 'bin' was only one level below. This commit
adapts the discovery of oguilib that uses relative paths
accordingly.
@@ -52,7 +52,9 @@ catch {rename send {}} ; # What an evil concept...
set oguilib {@@GITGUI_LIBDIR@@}
set oguirel {@@GITGUI_RELATIVE@@}
if {$oguirel eq {1}} {
- set oguilib [file dirname [file dirname [file normalize $argv0]]]
+ set oguilib [file dirname \
+ [file dirname \
+ [file dirname [file normalize $argv0]]]]
set oguilib [file join $oguilib share git-gui lib]
Hmmph. This actually comes up incorrectly on my system. The issue
appears to be `git --exec-path` gives me $prefix/libexec/git-core,
and git-gui installs its library into $prefix/libexec/share, which
is wrong. It should have gone to $prefix/share.
I am not seeing this problem because I am installing using the
toplevel makefile, which sets and exports sharedir to $prefix/share.
quoted hunk
I wonder if this is better. Your other two patches seem fine.
--8<--
[PATCH] git-gui: Correct installation of library to be $prefix/share
We always wanted the library for git-gui to install into the
$prefix/share directory, not $prefix/libexec/share. All of
the files in our library are platform independent and may
be reused across systems, like any other content stored in
the share directory.
Our computation of where our library should install to was broken
when git itself started installing to $prefix/libexec/git-core,
which was one level down from where we expected it to be.
Signed-off-by: Shawn O. Pearce <redacted>
---
Makefile | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
But gitexecdir has the correct value, no? gitexecdir is used
at several places in the makefile. It seems wrong to strip
'git-core' from gitexecdir. But I must admit that I do not
understand all the details of git-gui's Makefile. So maybe
you know better.
Isn't only the computation of sharedir based on gitexecdir wrong?
and could be replaced with this (instead of your patch):
ifndef sharedir
+ifeq (git-core,$(notdir $(gitexecdir)))
+ sharedir := $(dir $(patsubst %/,%,$(dir $(gitexecdir))))share
+else
sharedir := $(dir $(gitexecdir))share
endif
+endif
Steffen
and could be replaced with this (instead of your patch):
ifndef sharedir
+ifeq (git-core,$(notdir $(gitexecdir)))
+ sharedir := $(dir $(patsubst %/,%,$(dir $(gitexecdir))))share
+else
sharedir := $(dir $(gitexecdir))share
endif
+endif
Oh, damn good catch. Thanks.
How about this then? Its your patch above, my message, and me
forging your SOB...
--8<--
From: Steffen Prohaska <redacted>
Subject: git-gui: Correct installation of library to be $prefix/share
We always wanted the library for git-gui to install into the
$prefix/share directory, not $prefix/libexec/share. All of
the files in our library are platform independent and may
be reused across systems, like any other content stored in
the share directory.
Our computation of where our library should install to was broken
when git itself started installing to $prefix/libexec/git-core,
which was one level down from where we expected it to be.
Signed-off-by: Steffen Prohaska <redacted>
Signed-off-by: Shawn O. Pearce <redacted>
---
Makefile | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
and could be replaced with this (instead of your patch):
ifndef sharedir
+ifeq (git-core,$(notdir $(gitexecdir)))
+ sharedir := $(dir $(patsubst %/,%,$(dir $(gitexecdir))))share
+else
sharedir := $(dir $(gitexecdir))share
endif
+endif
Oh, damn good catch. Thanks.
How about this then? Its your patch above, my message, and me
forging your SOB...
From: Johannes Sixt <hidden> Date: 2016-06-15 22:45:06
Zitat von Steffen Prohaska [off-list ref]:
On Jul 27, 2008, at 11:24 PM, Shawn O. Pearce wrote:
quoted
Steffen Prohaska [off-list ref] wrote:
quoted
The new execdir has is two levels below the root directory, while
the old execdir 'bin' was only one level below. This commit
adapts the discovery of oguilib that uses relative paths
accordingly.
@@ -52,7 +52,9 @@ catch {rename send {}} ; # What an evil concept...
set oguilib {@@GITGUI_LIBDIR@@}
set oguirel {@@GITGUI_RELATIVE@@}
if {$oguirel eq {1}} {
- set oguilib [file dirname [file dirname [file normalize $argv0]]]
+ set oguilib [file dirname \
+ [file dirname \
+ [file dirname [file normalize $argv0]]]]
set oguilib [file join $oguilib share git-gui lib]
Hmmph. This actually comes up incorrectly on my system. The issue
appears to be `git --exec-path` gives me $prefix/libexec/git-core,
and git-gui installs its library into $prefix/libexec/share, which
is wrong. It should have gone to $prefix/share.
I am not seeing this problem because I am installing using the
toplevel makefile, which sets and exports sharedir to $prefix/share.
quoted
I wonder if this is better. Your other two patches seem fine.
--8<--
[PATCH] git-gui: Correct installation of library to be $prefix/share
We always wanted the library for git-gui to install into the
$prefix/share directory, not $prefix/libexec/share. All of
the files in our library are platform independent and may
be reused across systems, like any other content stored in
the share directory.
Our computation of where our library should install to was broken
when git itself started installing to $prefix/libexec/git-core,
which was one level down from where we expected it to be.
Signed-off-by: Shawn O. Pearce <redacted>
---
Makefile | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
But gitexecdir has the correct value, no? gitexecdir is used
at several places in the makefile. It seems wrong to strip
'git-core' from gitexecdir. But I must admit that I do not
understand all the details of git-gui's Makefile. So maybe
you know better.
Isn't only the computation of sharedir based on gitexecdir wrong?
and could be replaced with this (instead of your patch):
ifndef sharedir
+ifeq (git-core,$(notdir $(gitexecdir)))
+ sharedir := $(dir $(patsubst %/,%,$(dir $(gitexecdir))))share
+else
sharedir := $(dir $(gitexecdir))share
endif
+endif
This is not good enough in my environment. I run git-gui effectivly with
wish $prefix/libexec/git-core/git-gui
(and I have $PATH set up to contain $bindir, but not $gitexecdir), and this
needs the original hunk with the three [file dirname ... ], because $argv0
points to $prefix/libexec/git-core/git-gui.
I thought I understood what's going on, but I don't anymore.
Mybe the relative discovery of oguilib must be conditional on the "git-core"
part as well, just like you discover sharedir?
-- Hannes
On Jul 27, 2008, at 11:24 PM, Shawn O. Pearce wrote:
quoted
Steffen Prohaska [off-list ref] wrote:
quoted
The new execdir has is two levels below the root directory, while
the old execdir 'bin' was only one level below. This commit
adapts the discovery of oguilib that uses relative paths
accordingly.
@@ -52,7 +52,9 @@ catch {rename send {}} ; # What an evil
concept...
set oguilib {@@GITGUI_LIBDIR@@}
set oguirel {@@GITGUI_RELATIVE@@}
if {$oguirel eq {1}} {
- set oguilib [file dirname [file dirname [file normalize $argv0]]]
+ set oguilib [file dirname \
+ [file dirname \
+ [file dirname [file normalize $argv0]]]]
set oguilib [file join $oguilib share git-gui lib]
Hmmph. This actually comes up incorrectly on my system. The issue
appears to be `git --exec-path` gives me $prefix/libexec/git-core,
and git-gui installs its library into $prefix/libexec/share, which
is wrong. It should have gone to $prefix/share.
I am not seeing this problem because I am installing using the
toplevel makefile, which sets and exports sharedir to $prefix/share.
quoted
I wonder if this is better. Your other two patches seem fine.
--8<--
[PATCH] git-gui: Correct installation of library to be $prefix/share
We always wanted the library for git-gui to install into the
$prefix/share directory, not $prefix/libexec/share. All of
the files in our library are platform independent and may
be reused across systems, like any other content stored in
the share directory.
Our computation of where our library should install to was broken
when git itself started installing to $prefix/libexec/git-core,
which was one level down from where we expected it to be.
Signed-off-by: Shawn O. Pearce <redacted>
---
Makefile | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
But gitexecdir has the correct value, no? gitexecdir is used
at several places in the makefile. It seems wrong to strip
'git-core' from gitexecdir. But I must admit that I do not
understand all the details of git-gui's Makefile. So maybe
you know better.
Isn't only the computation of sharedir based on gitexecdir wrong?
and could be replaced with this (instead of your patch):
ifndef sharedir
+ifeq (git-core,$(notdir $(gitexecdir)))
+ sharedir := $(dir $(patsubst %/,%,$(dir $(gitexecdir))))share
+else
sharedir := $(dir $(gitexecdir))share
endif
+endif
This is not good enough in my environment.
This only fixes the installation directory.
I run git-gui effectivly with
wish $prefix/libexec/git-core/git-gui
(and I have $PATH set up to contain $bindir, but not $gitexecdir),
and this
needs the original hunk with the three [file dirname ... ], because
$argv0
points to $prefix/libexec/git-core/git-gui.
The original hunk fixes the discovery of oguilib, i.e.
from $prefix/libexec/git-core/git-gui to $prefix/share/git-gui/lib
I didn't recognize that the the 'three [file dinames ...]' have
not been applied because I had this change already in 4msysgit
(and still have). Apologies for not checking this more carefully.
I thought I understood what's going on, but I don't anymore.
Mybe the relative discovery of oguilib must be conditional on the
"git-core"
part as well, just like you discover sharedir?
Hmm... you are right. If we want to maintain compatibility
with *both* directory layouts, obviously all computations
that depend on the layout need to be conditional on it.
Steffen
From: Johannes Sixt <hidden> Date: 2016-06-15 22:45:06
The new execdir has is two levels below the root directory, while
the old execdir 'bin' was only one level below. This commit
adapts the discovery of oguilib that uses relative paths
accordingly. We determine whether we have the extra level in the same
way in which the Makefile defines sharedir, i.e. whether the last
directory part is 'git-core'.
Inspired-by: Steffen Prohaska [off-list ref]
Signed-off-by: Johannes Sixt <redacted>
---
Zitat von Steffen Prohaska [off-list ref]:
On Aug 3, 2008, at 11:35 AM, Johannes Sixt wrote:
quoted
I run git-gui effectivly with
wish $prefix/libexec/git-core/git-gui
(and I have $PATH set up to contain $bindir, but not $gitexecdir),
and this
needs the original hunk with the three [file dirname ... ], because
$argv0
points to $prefix/libexec/git-core/git-gui.
The original hunk fixes the discovery of oguilib, i.e.
from $prefix/libexec/git-core/git-gui to $prefix/share/git-gui/lib
I didn't recognize that the the 'three [file dinames ...]' have
not been applied because I had this change already in 4msysgit
(and still have). Apologies for not checking this more carefully.
quoted
I thought I understood what's going on, but I don't anymore.
Mybe the relative discovery of oguilib must be conditional on the
"git-core"
part as well, just like you discover sharedir?
Hmm... you are right. If we want to maintain compatibility
with *both* directory layouts, obviously all computations
that depend on the layout need to be conditional on it.
Here is a patch that does just this.
-- Hannes
git-gui/git-gui.sh | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
@@ -52,7 +52,11 @@ catch {rename send {}} ; # What an evil concept...setoguilib{@@GITGUI_LIBDIR@@}setoguirel{@@GITGUI_RELATIVE@@}if{$oguireleq{1}}{-setoguilib[filedirname[filedirname[filenormalize$argv0]]]+setoguilib[filedirname[filenormalize$argv0]]+if{[lindex[filesplit$oguilib]end]eq{git-core}}{+setoguilib[filedirname$oguilib]
Isn't that what [file tail] does?
if {[file tail $oguilib] eq {git-core}} {
But otherwise this looks good to me. I'll apply it later tonight,
unless you agree that file tail is better here.
--
Shawn.
From: Johannes Sixt <hidden> Date: 2016-06-15 22:45:06
The new execdir has is two levels below the root directory, while
the old execdir 'bin' was only one level below. This commit
adapts the discovery of oguilib that uses relative paths
accordingly. We determine whether we have the extra level in the same
way in which the Makefile defines sharedir, i.e. whether the last
directory part is 'git-core'.
Inspired-by: Steffen Prohaska [off-list ref]
Signed-off-by: Johannes Sixt <redacted>
---
Zitat von "Shawn O. Pearce" [off-list ref]:
Johannes Sixt [off-list ref] wrote:
quoted
+ if {[lindex [file split $oguilib] end] eq {git-core}} {
Isn't that what [file tail] does?
Yes, it is. I missed it in the myriad of file's options. Here's the updated
version of the patch.
-- Hannes
git-gui/git-gui.sh | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)