예제 #1
0
 public static void CopyFolder(NPath fromPath, NPath toPath)
 {
     Logger.Trace("CopyFolder fromPath: {0} toPath:{1}", fromPath.ToString(), toPath.ToString());
     toPath.DeleteIfExists();
     toPath.EnsureParentDirectoryExists();
     fromPath.Move(toPath);
 }
예제 #2
0
 public GitLock(string id, NPath path, GitUser owner, DateTimeOffset locked_at)
 {
     this.id             = id;
     this.path           = path.IsInitialized ? path.ToString() : null;
     this.owner          = owner;
     this.lockedAtString = locked_at.ToUniversalTime().ToString(Constants.Iso8601FormatZ, CultureInfo.InvariantCulture);
 }
예제 #3
0
        private void ReadCacheFromDisk()
        {
            logger.Trace("ReadCacheFromDisk Path:{0}", cachePath.ToString());

            ConnectionCacheItem[] connections = null;

            if (cachePath.FileExists())
            {
                var json = cachePath.ReadAllText();
                try
                {
                    connections = SimpleJson.DeserializeObject <ConnectionCacheItem[]>(json);
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Error deserializing connection cache: {0}", cachePath);
                    cachePath.Delete();
                }
            }

            if (connections != null)
            {
                connectionCache =
                    connections.Select(item => new Connection {
                    Host = new UriString(item.Host), Username = item.Username
                })
                    .ToDictionary(connection => connection.Host);
            }
            else
            {
                connectionCache = new Dictionary <UriString, Connection>();
            }
        }
예제 #4
0
        public static void CopyFolderContents(NPath fromPath, NPath toPath)
        {
            Logger.Trace("CopyFolderContents fromPath: {0} toPath:{1}", fromPath.ToString(), toPath.ToString());

            toPath.DeleteContents();
            fromPath.MoveFiles(toPath, true);
        }
예제 #5
0
        private NPath MoveOctorun(NPath fromPath)
        {
            var toPath = installDetails.InstallationPath;

            Logger.Trace("MoveOctorun fromPath: {0} toPath:{1}", fromPath.ToString(), toPath.ToString());

            CopyHelper.Copy(fromPath, toPath);

            return(installDetails.ExecutablePath);
        }
예제 #6
0
        public static NPath Resolve(this NPath path)
        {
            // Add a reference to Mono.Posix with an .rsp file in the Assets folder with the line "-r:Mono.Posix.dll" for this to work
#if ENABLE_MONO
            if (!path.IsInitialized || !NPath.IsLinux /* nothing to resolve on windows */ || path.IsRelative || !path.FileExists())
            {
                return(path);
            }
            return(new NPath(Mono.Unix.UnixPath.GetCompleteRealPath(path.ToString())));
#else
            return(path);
#endif
        }
예제 #7
0
        private void SaveUsage(UsageStore store)
        {
            var pathString = storePath.ToString();

            Logger.Trace("SaveUsage: \"{0}\"", pathString);

            try
            {
                var json = SimpleJson.SerializeObject(store);
                storePath.WriteAllText(json, Encoding.UTF8);
            }
            catch (Exception ex)
            {
                Logger.Error(ex, "SaveUsage Error: \"{0}\"", pathString);
            }
        }
예제 #8
0
        public GitUnlockTask(NPath path, bool force,
                             CancellationToken token, IOutputProcessor <string> processor = null)
            : base(token, processor ?? new SimpleOutputProcessor())
        {
            Guard.ArgumentNotNullOrWhiteSpace(path, "path");

            Name = TaskName;
            var stringBuilder = new StringBuilder("unlock ");

            if (force)
            {
                stringBuilder.Append("--force ");
            }

            stringBuilder.Append("\"");
            stringBuilder.Append(path.ToString(SlashMode.Forward));
            stringBuilder.Append("\"");

            arguments = stringBuilder.ToString();
        }
예제 #9
0
        public void Configure(ProcessStartInfo psi, NPath workingDirectory, bool dontSetupGit = false)
        {
            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;

            if (dontSetupGit)
            {
                psi.EnvironmentVariables["GHU_FULLPATH"] = path;
                psi.EnvironmentVariables["PATH"]         = 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["PATH"]         = 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;
            }
        }