git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH 0/1] Give Git a HOME on Windows
@ 2019-07-04  9:20 Johannes Schindelin via GitGitGadget
  2019-07-04  9:20 ` [PATCH 1/1] mingw: initialize HOME on startup Karsten Blees via GitGitGadget
  0 siblings, 1 reply; 2+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2019-07-04  9:20 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

The environment variable HOME is a well-known concept on Unix/Linux, but not
so much on Windows. In fact, there are competing concepts, and they fulfill
separate roles.

Let's try to map the closest that we can find to HOME so that Git is happy.

Git for Windows carries this patch since 2015, so I think we're pretty sure
that our chosen strategy works.

Karsten Blees (1):
  mingw: initialize HOME on startup

 compat/mingw.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)


base-commit: aa25c82427ae70aebf3b8f970f2afd54e9a2a8c6
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-218%2Fdscho%2Fmingw-home-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-218/dscho/mingw-home-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/218
-- 
gitgitgadget

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [PATCH 1/1] mingw: initialize HOME on startup
  2019-07-04  9:20 [PATCH 0/1] Give Git a HOME on Windows Johannes Schindelin via GitGitGadget
@ 2019-07-04  9:20 ` Karsten Blees via GitGitGadget
  0 siblings, 0 replies; 2+ messages in thread
From: Karsten Blees via GitGitGadget @ 2019-07-04  9:20 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Karsten Blees

From: Karsten Blees <blees@dcon.de>

HOME initialization was historically duplicated in many different places,
including /etc/profile, launch scripts such as git-bash.vbs and gitk.cmd,
and (although slightly broken) in the git-wrapper.

Even unrelated projects such as GitExtensions and TortoiseGit need to
implement the same logic to be able to call git directly.

Initialize HOME in git's own startup code so that we can eventually retire
all the duplicate initialization code.

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 compat/mingw.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/compat/mingw.c b/compat/mingw.c
index 9b6d2400e1..1047427cb5 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -2299,6 +2299,30 @@ static void setup_windows_environment(void)
 	/* simulate TERM to enable auto-color (see color.c) */
 	if (!getenv("TERM"))
 		setenv("TERM", "cygwin", 1);
+
+	/* calculate HOME if not set */
+	if (!getenv("HOME")) {
+		/*
+		 * try $HOMEDRIVE$HOMEPATH - the home share may be a network
+		 * location, thus also check if the path exists (i.e. is not
+		 * disconnected)
+		 */
+		if ((tmp = getenv("HOMEDRIVE"))) {
+			struct strbuf buf = STRBUF_INIT;
+			strbuf_addstr(&buf, tmp);
+			if ((tmp = getenv("HOMEPATH"))) {
+				strbuf_addstr(&buf, tmp);
+				if (is_directory(buf.buf))
+					setenv("HOME", buf.buf, 1);
+				else
+					tmp = NULL; /* use $USERPROFILE */
+			}
+			strbuf_release(&buf);
+		}
+		/* use $USERPROFILE if the home share is not available */
+		if (!tmp && (tmp = getenv("USERPROFILE")))
+			setenv("HOME", tmp, 1);
+	}
 }
 
 /*
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-07-04  9:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-04  9:20 [PATCH 0/1] Give Git a HOME on Windows Johannes Schindelin via GitGitGadget
2019-07-04  9:20 ` [PATCH 1/1] mingw: initialize HOME on startup Karsten Blees via GitGitGadget

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).