git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 7/8] Makefile: introduce SANE_TOOL_PATH for prepending required elements to PATH

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 8, 2009, 16:41 UTC
Message-ID
<7v4ouq1xv6.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20090608114351.GA13775@coredump.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 14 quoted lines
> On Fri, Jun 05, 2009 at 06:36:15PM -0500, Brandon Casey wrote:
> ...
>> So provide a mechanism to prepend elements to the users PATH at runtime so
>> the modern binaries will be found.
>
> So this bit me already, and it's only been in next for a day. :) I
> _already_ have /usr/xpg4/bin in my PATH before /usr/bin, but with this
> patch, I get it stuck at the _beginning_ of my PATH automagically. Which
> overrides, against my wishes, the "even more sane than /usr/xpg4/bin"
> part of my PATH that comes at the beginning.
>
> Specifically, I have "~peff/local/bin" at the beginning of my PATH which
> contains a 'vi' that points to vim. Running "git rebase -i" now puts
> /usr/xpg4/bin at the beginning of the PATH (before ~peff/local/bin),

In git-sh-setup, we do "unset CDPATH" ourselves to help and protect clueless people, even though "people should have a sane environment". Even though I suspect that anybody who is using Solaris for anything real would not be using /usr/bin tools themselves (i.e. it should not be necessary for us fixing their PATH), there may be people who do not know. I think helping them with path munging falls into the same category, but at the same time, the remedy looks worse than the disease.

We could further uglify the patch like this.
 Makefile        |    5 +++--
 git-sh-setup.sh |   28 +++++++++++++++++++++++++++-
 2 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index 3890a0e..c678cc0 100644
--- a/Makefile
+++ b/Makefile
@@ -881,7 +881,8 @@ endif
 -include config.mak
 
 ifdef SANE_TOOL_PATH
-BROKEN_PATH_FIX = s|^. @@PATH@@|PATH=$(SANE_TOOL_PATH)|
+SANE_TOOL_PATH_SQ = $(subst ','\'',$(SANE_TOOL_PATH))
+BROKEN_PATH_FIX = 's|^\# @@BROKEN_PATH_FIX@@$$|git_broken_path_fix $(SANE_TOOL_PATH_SQ)|'
 PATH := $(SANE_TOOL_PATH):${PATH}
 else
 BROKEN_PATH_FIX = d
@@ -1288,7 +1289,7 @@ $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
 	    -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
 	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
 	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
-	    -e '/^# @@PATH@@/$(BROKEN_PATH_FIX)' \
+	    -e $(BROKEN_PATH_FIX) \
 	    $@.sh >$@+ && \
 	chmod +x $@+ && \
 	mv $@+ $@
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index 7802581..80acb7d 100755
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -11,7 +11,33 @@
 # exporting it.
 unset CDPATH
 
-# @@PATH@@:$PATH
+git_broken_path_fix () {
+	case ":$PATH:" in
+	*:$1:*) : ok ;;
+	*)
+		PATH=$(
+			SANE_TOOL_PATH="$1"
+			IFS=: path= sep=
+			set x $PATH
+			shift
+			for elem
+			do
+				case "$SANE_TOOL_PATH:$elem" in
+				(?*:/bin | ?*:/usr/bin)
+					path="$path$sep$SANE_TOOL_PATH"
+					sep=:
+					SANE_TOOL_PATH=
+				esac
+				path="$path$sep$elem"
+				sep=:
+			done
+			echo "$path"
+		)
+		;;
+	esac
+}
+
+# @@BROKEN_PATH_FIX@@
 
 die() {
 	echo >&2 "$@"
Previous: Brandon CaseyNext: Jeff King
Message 14 of 30 in “enhancing builds on Solaris”
  1. 0/8 enhancing builds on SolarisBrandon Casey, Jun 5, 2009
  2. 1/8 Makefile: use /usr/ucb/install on SunOS platforms rather than ginstallBrandon Casey, Jun 5, 2009
  3. 2/8 Makefile: add NEEDS_RESOLV to optionally add -lresolv to compile argumentsBrandon Casey, Jun 5, 2009
  4. 3/8 diff-delta.c: "diff.h" is not a required includeBrandon Casey, Jun 5, 2009
  5. 4/8 On Solaris choose the OLD_ICONV iconv() declaration based on the UNIX specBrandon Casey, Jun 5, 2009
  6. 5/8 git-compat-util.h: tweak the way _XOPEN_SOURCE is set on SolarisBrandon Casey, Jun 5, 2009
  7. 6/8 Makefile: define __sun__ on SunOSBrandon Casey, Jun 5, 2009
  8. 7/8 Makefile: introduce SANE_TOOL_PATH for prepending required elements to PATHBrandon Casey, Jun 5, 2009
  9. 8/8 Makefile: add section for SunOS 5.7Brandon Casey, Jun 5, 2009
  10. Jeff KingJun 8, 2009
  11. Brandon CaseyJun 8, 2009
  12. Jeff KingJun 8, 2009
  13. Brandon CaseyJun 8, 2009
  14. Junio C HamanoJun 8, 2009
  15. Jeff KingJun 8, 2009
  16. Brandon CaseyJun 8, 2009
  17. Brandon CaseyJun 9, 2009
  18. 3/8 diff-delta.c: "delta.h" is not a required includeBrandon Casey, Jun 6, 2009
  19. Nicolas PitreJun 6, 2009
  20. Brandon CaseyJun 6, 2009
  21. Nicolas PitreJun 6, 2009
  22. Brandon CaseyJun 6, 2009
  23. git-compat-util.h: avoid using c99 flex array feature with Sun compiler 5.8Brandon Casey, Jun 8, 2009
  24. Jakub NarebskiJun 6, 2009
  25. Brandon CaseyJun 7, 2009
  26. configure: test whether -lresolv is neededRalf Wildenhues, Jun 7, 2009
  27. Brandon CaseyJun 5, 2009
  28. Junio C HamanoJun 6, 2009
  29. Brandon CaseyJun 6, 2009
  30. Jeff KingJun 8, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.