Пример #1
0
            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);
            }
Пример #2
0
 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());
 }
Пример #3
0
        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);
        }
Пример #4
0
        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());
                }
            }
        }
Пример #5
0
        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));
        }
Пример #6
0
        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");
        }
Пример #7
0
        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";
 */
        }