public void FindSystemDirectory_Windows() { using var temp = new TempRoot(); var base1 = temp.CreateDirectory(); var base2 = temp.CreateDirectory(); var d3 = temp.CreateDirectory(); var d1 = base1.CreateDirectory("1"); d1.CreateFile("git.cmd"); var d2 = base2.CreateDirectory("2"); d2.CreateFile("git.exe"); Assert.Null(GitEnvironment.FindSystemDirectory(null, null)); Assert.Null(GitEnvironment.FindSystemDirectory("", null)); Assert.Null(GitEnvironment.FindSystemDirectory(";", null)); Assert.Equal(GitEnvironment.FindSystemDirectory($"*;<>; ;;{d3};{d1}", ""), Path.Combine(base1.Path, "etc")); Assert.Equal(GitEnvironment.FindSystemDirectory($"*;<>;\t;;{d3};{d2}", ""), Path.Combine(base2.Path, "etc")); }
public void Configure(ProcessStartInfo psi) { defaultEnvironment.Configure(psi); //if (gitInstallPath == SPath.Default || gitInstallPath != Environment.GitInstallPath) ResolvePaths(); var pathEntries = new List <string>(envPath); string separator = GitEnvironment.IsWindows ? ";" : ":"; // we can only set this env var if there is a libexec/git-core. git will bypass internally bundled tools if this env var // is set, which will break Apple's system git on certain tools (like osx-credentialmanager) if (libExecPath.IsInitialized) { psi.EnvironmentVariables["GIT_EXEC_PATH"] = libExecPath.ToString(); } pathEntries.Add("END"); var path = string.Join(separator, pathEntries.ToArray()) + separator + GitEnvironment.Path; var pathEnvVarKey = GitEnvironment.GetEnvironmentVariableKey("PATH"); psi.EnvironmentVariables[pathEnvVarKey] = path; //if (Environment.IsWindows) //{ // psi.EnvironmentVariables["PLINK_PROTOCOL"] = "ssh"; // psi.EnvironmentVariables["TERM"] = "msys"; //} var httpProxy = GitEnvironment.GetEnvironmentVariable("HTTP_PROXY"); if (!string.IsNullOrEmpty(httpProxy)) { psi.EnvironmentVariables["HTTP_PROXY"] = httpProxy; } var httpsProxy = GitEnvironment.GetEnvironmentVariable("HTTPS_PROXY"); if (!string.IsNullOrEmpty(httpsProxy)) { psi.EnvironmentVariables["HTTPS_PROXY"] = httpsProxy; } psi.EnvironmentVariables["DISPLAY"] = "0"; if (!GitEnvironment.IsWindows) { psi.EnvironmentVariables["GIT_TEMPLATE_DIR"] = GitEnvironment.GitInstallPath.Combine("share/git-core/templates"); } if (GitEnvironment.IsLinux) { psi.EnvironmentVariables["PREFIX"] = GitEnvironment.GitExecutablePath.Parent; } var sslCAInfo = GitEnvironment.GetEnvironmentVariable("GIT_SSL_CAINFO"); if (string.IsNullOrEmpty(sslCAInfo)) { var certFile = basePath.Combine("ssl/cacert.pem"); if (certFile.FileExists()) { psi.EnvironmentVariables["GIT_SSL_CAINFO"] = certFile.ToString(); } } /* * psi.WorkingDirectory = workingDirectory; * psi.EnvironmentVariables["HOME"] = SPath.HomeDirectory; * psi.EnvironmentVariables["TMP"] = psi.EnvironmentVariables["TEMP"] = SPath.SystemTemp; * * var path = Environment.Path; * psi.EnvironmentVariables["GHU_WORKINGDIR"] = workingDirectory; * var pathEnvVarKey = Environment.GetEnvironmentVariableKey("PATH"); * * if (dontSetupGit) * { * psi.EnvironmentVariables["GHU_FULLPATH"] = path; * psi.EnvironmentVariables[pathEnvVarKey] = path; * return; * } * * Guard.ArgumentNotNull(psi, "psi"); * * var pathEntries = new List<string>(); * string separator = Environment.IsWindows ? ";" : ":"; * * SPath libexecPath = SPath.Default; * List<string> gitPathEntries = new List<string>(); * if (Environment.GitInstallPath.IsInitialized) * { * var gitPathRoot = Environment.GitExecutablePath.Resolve().Parent.Parent; * var gitExecutableDir = Environment.GitExecutablePath.Parent; // original path to git (might be different from install path if it's a symlink) * * var baseExecPath = gitPathRoot; * var binPath = baseExecPath; * if (Environment.IsWindows) * { * if (baseExecPath.DirectoryExists("mingw32")) * baseExecPath = baseExecPath.Combine("mingw32"); * else * baseExecPath = baseExecPath.Combine("mingw64"); * binPath = baseExecPath.Combine("bin"); * } * * libexecPath = baseExecPath.Combine("libexec", "git-core"); * if (!libexecPath.DirectoryExists()) * libexecPath = SPath.Default; * * if (Environment.IsWindows) * { * gitPathEntries.AddRange(new[] { gitPathRoot.Combine("cmd").ToString(), gitPathRoot.Combine("usr", "bin") }); * } * else * { * gitPathEntries.Add(gitExecutableDir.ToString()); * } * * if (libexecPath.IsInitialized) * gitPathEntries.Add(libexecPath); * gitPathEntries.Add(binPath); * * // we can only set this env var if there is a libexec/git-core. git will bypass internally bundled tools if this env var * // is set, which will break Apple's system git on certain tools (like osx-credentialmanager) * if (libexecPath.IsInitialized) * psi.EnvironmentVariables["GIT_EXEC_PATH"] = libexecPath.ToString(); * } * * if (Environment.GitLfsInstallPath.IsInitialized && libexecPath != Environment.GitLfsInstallPath) * { * pathEntries.Add(Environment.GitLfsInstallPath); * } * if (gitPathEntries.Count > 0) * pathEntries.AddRange(gitPathEntries); * * pathEntries.Add("END"); * * path = string.Join(separator, pathEntries.ToArray()) + separator + path; * * psi.EnvironmentVariables["GHU_FULLPATH"] = path; * psi.EnvironmentVariables[pathEnvVarKey] = path; * * //TODO: Remove with Git LFS Locking becomes standard * psi.EnvironmentVariables["GITLFSLOCKSENABLED"] = "1"; * * if (Environment.IsWindows) * { * psi.EnvironmentVariables["PLINK_PROTOCOL"] = "ssh"; * psi.EnvironmentVariables["TERM"] = "msys"; * } * * var httpProxy = Environment.GetEnvironmentVariable("HTTP_PROXY"); * if (!string.IsNullOrEmpty(httpProxy)) * psi.EnvironmentVariables["HTTP_PROXY"] = httpProxy; * * var httpsProxy = Environment.GetEnvironmentVariable("HTTPS_PROXY"); * if (!string.IsNullOrEmpty(httpsProxy)) * psi.EnvironmentVariables["HTTPS_PROXY"] = httpsProxy; * psi.EnvironmentVariables["DISPLAY"] = "0"; */ }
public void FindSystemDirectory_Unix(string etc, string expected) { Assert.Equal(expected, GitEnvironment.FindSystemDirectory(null, etc)); }