public GitInstallDetails(NPath baseDataPath, IEnvironment environment) { ZipPath = baseDataPath.Combine("downloads"); ZipPath.EnsureDirectoryExists(); GitInstallationPath = baseDataPath.Combine(GitDirectory); GitExecutablePath = GitInstallationPath.Combine(environment.IsWindows ? "cmd" : "bin", "git" + DefaultEnvironment.ExecutableExt); GitLfsInstallationPath = GitLfsExecutablePath = GitInstallationPath; if (environment.IsWindows) { GitLfsExecutablePath = GitLfsInstallationPath.Combine(environment.Is32Bit ? "mingw32" : "mingw64"); } GitLfsExecutablePath = GitLfsExecutablePath.Combine("libexec", "git-core"); GitLfsExecutablePath = GitLfsExecutablePath.Combine("git-lfs" + DefaultEnvironment.ExecutableExt); GitManifest = baseDataPath.Combine(GitPackageName); }
public static IEnumerable <NPath> Move(this IEnumerable <NPath> self, NPath dest) { if (dest.IsRelative) { throw new ArgumentException("When moving multiple files, the destination cannot be a relative path"); } dest.EnsureDirectoryExists(); return(self.Select(p => p.Move(dest.Combine(p.FileName))).ToArray()); }
public static NPath ToFile(ResourceType resourceType, string resource, NPath destinationPath, IEnvironment environment) { var target = destinationPath.Combine(resource); var source = TryGetFile(resourceType, resource, environment); if (source.IsInitialized) { target.DeleteIfExists(); return(source.Copy(target)); } return(NPath.Default); }
public static NPath CreateTempDirectory(this NPath baseDir, string myprefix = "") { var random = new Random(); while (true) { var candidate = baseDir.Combine(myprefix + "_" + random.Next()); if (!candidate.Exists()) { return(candidate.CreateDirectory()); } } }
public static NPath GetAssetPath(this IEnvironment environment, NPath path) { Guard.ArgumentNotNull(path, nameof(path)); NPath projectPath = environment.UnityProjectPath; NPath repositoryPath = environment.RepositoryPath; if (projectPath == repositoryPath) { return(path); } if (repositoryPath.IsChildOf(projectPath)) { throw new InvalidOperationException($"RepositoryPath:\"{repositoryPath}\" should not be child of ProjectPath:\"{projectPath}\""); } return(repositoryPath.Combine(path).MakeAbsolute().RelativeTo(projectPath)); }
public RepositoryPathConfiguration(NPath repositoryPath) { RepositoryPath = repositoryPath; WorktreeDotGitPath = NPath.Default; DotGitPath = repositoryPath.Combine(".git"); NPath commonPath; if (DotGitPath.FileExists()) { DotGitPath = DotGitPath.ReadAllLines() .Where(x => x.StartsWith("gitdir:")) .Select(x => x.Substring(7).Trim().ToNPath()) .First(); if (DotGitPath.Combine("commondir").FileExists()) { commonPath = DotGitPath.Combine("commondir").ReadAllLines() .Select(x => x.Trim().ToNPath()) .First(); commonPath = DotGitPath.Combine(commonPath); IsWorktree = true; WorktreeDotGitPath = commonPath; } else { commonPath = DotGitPath; } } else { commonPath = DotGitPath; } BranchesPath = commonPath.Combine("refs", "heads"); RemotesPath = commonPath.Combine("refs", "remotes"); DotGitIndex = DotGitPath.Combine("index"); DotGitHead = DotGitPath.Combine("HEAD"); DotGitConfig = commonPath.Combine("config"); DotGitCommitEditMsg = DotGitPath.Combine("COMMIT_EDITMSG"); }
public void Configure(ProcessStartInfo psi, NPath workingDirectory, bool dontSetupGit = false) { GeneralConfigure(psi, workingDirectory); if (dontSetupGit) { return; } //if (gitInstallPath == NPath.Default || gitInstallPath != Environment.GitInstallPath) Reset(); var pathEntries = new List <string>(envPath); string separator = Environment.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 + Environment.Path; var pathEnvVarKey = Environment.GetEnvironmentVariableKey("PATH"); psi.EnvironmentVariables[pathEnvVarKey] = path; //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"; if (!Environment.IsWindows) { psi.EnvironmentVariables["GIT_TEMPLATE_DIR"] = Environment.GitInstallPath.Combine("share/git-core/templates"); } if (Environment.IsLinux) { psi.EnvironmentVariables["PREFIX"] = Environment.GitExecutablePath.Parent; } var sslCAInfo = Environment.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"] = NPath.HomeDirectory; * psi.EnvironmentVariables["TMP"] = psi.EnvironmentVariables["TEMP"] = NPath.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 ? ";" : ":"; * * NPath libexecPath = NPath.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 = NPath.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"; */ }