If TCLTK_PATH points at a pure Win32 Tcl/Tk implementation but you are running git (and thus gitk) from within Cygwin the value of $0 is a UNIX style Cygwin path which the native Tcl/Tk is unable to open and parse. In such a situation we need to switch to using the Windows style path by running $0 through cygpath. This doesn't have a negative impact when using the Cygwin based Tcl/Tk build as that is still close enough to a native Win32 application that it can read the Windows style path when sourcing gitk. On any other platform we don't want gitk to do anything different so we keep argv0=$0. Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- Yes, I admit this is an odd patch. I can certainly carry it in my own tree (I already carry some other patches) but I wonder if we shouldn't include it as some users may actually try to do this, just like I did. Latest git-gui `master` already has changes to its Makefile and shell startup boilerplate to handle this weird case. Makefile | 6 +++++- gitk | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 0055eef..4fc6eb3 100644 --- a/Makefile +++ b/Makefile @@ -386,6 +386,7 @@ EXTLIBS = # # Platform specific tweaks # +gitk_argv0 := $$0 # We choose to avoid "if .. else if .. else .. endif endif" # because maintaining the nesting to match is a pain. If @@ -443,6 +444,7 @@ ifeq ($(uname_O),Cygwin) NO_MMAP = YesPlease NO_IPV6 = YesPlease X = .exe + gitk_argv0 := `cygpath --windows --absolute "$(gitk_argv0)"` endif ifeq ($(uname_S),FreeBSD) NEEDS_LIBICONV = YesPlease @@ -763,7 +765,9 @@ strip: $(PROGRAMS) git$X gitk-wish: gitk GIT-GUI-VARS $(QUIET_GEN)$(RM) $@ $@+ && \ - sed -e '1,3s|^exec .* "$$0"|exec $(subst |,'\|',$(TCLTK_PATH_SQ)) "$$0"|' <gitk >$@+ && \ + sed -e '1,30s|^argv0=$$0|argv0=$(gitk_argv0)|' \ + -e '1,4s|^exec .* "$$argv0"|exec $(subst |,'\|',$(TCLTK_PATH_SQ)) "$$argv0"|' \ + <gitk >$@+ && \ chmod +x $@+ && \ mv -f $@+ $@ diff --git a/gitk b/gitk index 300fdce..2366911 100755 --- a/gitk +++ b/gitk @@ -1,6 +1,7 @@ #!/bin/sh # Tcl ignores the next line -*- tcl -*- \ -exec wish "$0" -- "$@" +argv0=$0; \ +exec wish "$argv0" -- "$@" # Copyright (C) 2005-2006 Paul Mackerras. All rights reserved. # This program is free software; it may be used, copied, modified -- 1.5.3.2.1036.gcd14a - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html