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(); }
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()); }