public virtual async Task Run(bool firstRun)
        {
            Logger.Trace("Run - CurrentDirectory {0}", NPath.CurrentDirectory);

            if (Environment.GitExecutablePath != null)
            {
                GitClient = new GitClient(Environment, ProcessManager, Platform.CredentialManager, TaskManager);
            }
            else
            {
                var progress = new ProgressReport();

                var gitClient    = new GitClient(Environment, ProcessManager, Platform.CredentialManager, TaskManager);
                var gitSetup     = new GitInstaller(Environment, CancellationToken);
                var expectedPath = gitSetup.GitInstallationPath;
                var setupDone    = await gitSetup.SetupIfNeeded(progress.Percentage, progress.Remaining);

                if (setupDone)
                {
                    Environment.GitExecutablePath = gitSetup.GitExecutablePath;
                }
                else
                {
                    Environment.GitExecutablePath = await LookForGitInstallationPath(gitClient, SystemSettings).SafeAwait();
                }

                GitClient = gitClient;

                Logger.Trace("Environment.GitExecutablePath \"{0}\" Exists:{1}", gitSetup.GitExecutablePath, gitSetup.GitExecutablePath.FileExists());

                if (Environment.IsWindows)
                {
                    var credentialHelper = await GitClient.GetConfig("credential.helper", GitConfigSource.Global).StartAwait();

                    if (string.IsNullOrEmpty(credentialHelper))
                    {
                        await GitClient.SetConfig("credential.helper", "wincred", GitConfigSource.Global).StartAwait();
                    }
                }
            }

            RestartRepository();
            InitializeUI();

            new ActionTask(CancellationToken, SetupMetrics).Start();
            new ActionTask(new Task(() => LoadKeychain().Start())).Start();
            new ActionTask(CancellationToken, RunRepositoryManager).Start();
        }
Esempio n. 2
0
        private async Task <NPath> DetermineGitExecutablePath(ProgressReport progress = null)
        {
            var gitExecutablePath = SystemSettings.Get(Constants.GitInstallPathKey)?.ToNPath();

            if (gitExecutablePath != null && gitExecutablePath.FileExists())
            {
                Logger.Trace("Using git install path from settings");
                return(gitExecutablePath);
            }

            var gitInstaller = new GitInstaller(Environment, CancellationToken);
            var setupDone    = await gitInstaller.SetupIfNeeded(progress?.Percentage, progress?.Remaining);

            if (setupDone)
            {
                Logger.Trace("Setup performed using new path");
                return(gitInstaller.GitExecutablePath);
            }

            Logger.Trace("Finding git install path");
            return(await GitClient.FindGitInstallation().SafeAwait());
        }