diff --git a/src/GitHub.Api/Application/ApplicationManagerBase.cs b/src/GitHub.Api/Application/ApplicationManagerBase.cs index 31bf7f5fd..848f6d302 100644 --- a/src/GitHub.Api/Application/ApplicationManagerBase.cs +++ b/src/GitHub.Api/Application/ApplicationManagerBase.cs @@ -52,6 +52,11 @@ protected void Initialize() public void Run(bool firstRun) { Logger.Trace("Run - CurrentDirectory {0}", NPath.CurrentDirectory); + isBusy = true; + + var endTask = new ActionTask(CancellationToken, + (_, state) => InitializeEnvironment(state)) + { Affinity = TaskAffinity.UI }; ITask setExistingEnvironmentPath; if (Environment.IsMac) @@ -59,14 +64,15 @@ public void Run(bool firstRun) setExistingEnvironmentPath = new SimpleProcessTask(CancellationToken, "bash".ToNPath(), "-c \"/usr/libexec/path_helper\"") .Configure(ProcessManager, dontSetupGit: true) .Catch(e => true) // make sure this doesn't throw if the task fails - .Then((success, path) => success ? path.Split(new[] { "\"" }, StringSplitOptions.None)[1] : null); + .Then((success, path) => success ? path?.Split(new[] { "\"" }, StringSplitOptions.None)[1] : null); } else { setExistingEnvironmentPath = new FuncTask(CancellationToken, () => null); } - setExistingEnvironmentPath.OnEnd += (t, path, success, ex) => { + setExistingEnvironmentPath.OnEnd += (t, path, success, ex) => + { if (path != null) { Logger.Trace("Existing Environment Path Original:{0} Updated:{1}", Environment.Path, path); @@ -74,60 +80,50 @@ public void Run(bool firstRun) } }; - var initEnvironmentTask = new ActionTask(CancellationToken, - (_, state) => InitializeEnvironment(state)) - { Affinity = TaskAffinity.UI }; - - isBusy = true; + var setupOctorun = new OctorunInstaller(Environment, TaskManager).SetupOctorunIfNeeded(); + var setOctorunEnvironment = new ActionTask(CancellationToken, + (s, octorunPath) => Environment.OctorunScriptPath = octorunPath); - var octorunInstaller = new OctorunInstaller(Environment, TaskManager); - var setupTask = setExistingEnvironmentPath.Then(octorunInstaller.SetupOctorunIfNeeded()); - - var initializeGitTask = new FuncTask(CancellationToken, () => - { - var gitExecutablePath = SystemSettings.Get(Constants.GitInstallPathKey)?.ToNPath(); - if (gitExecutablePath.HasValue && gitExecutablePath.Value.FileExists()) // we have a git path - { - Logger.Trace("Using git install path from settings: {0}", gitExecutablePath); - return gitExecutablePath.Value; - } - return NPath.Default; - }); - var setOctorunEnvironmentTask = new ActionTask(CancellationToken, (s, octorunPath) => + var getGitFromSettings = new FuncTask(CancellationToken, () => + { + var gitExecutablePath = SystemSettings.Get(Constants.GitInstallPathKey)?.ToNPath(); + if (gitExecutablePath.HasValue && gitExecutablePath.Value.FileExists()) // we have a git path { - Environment.OctorunScriptPath = octorunPath; - }); + Logger.Trace("Using git install path from settings: {0}", gitExecutablePath); + return gitExecutablePath.Value; + } + return NPath.Default; + }); - setupTask.OnEnd += (t, path, _, __) => + getGitFromSettings.OnEnd += (t, path, _, __) => + { + if (path.IsInitialized) { - t.GetEndOfChain().Then(setOctorunEnvironmentTask).Then(initializeGitTask); - }; + var state = new GitInstaller.GitInstallationState { GitExecutablePath = path }; + endTask.PreviousResult = state; + endTask.Start(); + return; + } + Logger.Trace("Using portable git"); - initializeGitTask.OnEnd += (t, path, _, __) => + var setupGit = new GitInstaller(Environment, ProcessManager, TaskManager).SetupGitIfNeeded(); + t.Then(setupGit); + setupGit.Finally((s, state) => { - if (path.IsInitialized) - { - t.GetEndOfChain() - .Then(initEnvironmentTask, taskIsTopOfChain: true); - return; - } - Logger.Trace("Using portable git"); - - var gitInstaller = new GitInstaller(Environment, ProcessManager, TaskManager); - - var task = gitInstaller.SetupGitIfNeeded(); - task.Progress(progressReporter.UpdateProgress); - task.OnEnd += (thisTask, result, success, exception) => - { - thisTask.GetEndOfChain() - .Then(initEnvironmentTask, taskIsTopOfChain: true); - }; + endTask.PreviousResult = state; + endTask.Start(); + }); + setupGit.Progress(progressReporter.UpdateProgress); + // append installer task to top chain + }; - // append installer task to top chain - t.Then(task, taskIsTopOfChain: true); - }; + var setupChain = setExistingEnvironmentPath.Then(setupOctorun); + setupChain.OnEnd += (t, path, _, __) => + { + t.GetEndOfChain().Then(setOctorunEnvironment).Then(getGitFromSettings); + }; - setupTask.Start(); + setupChain.Start(); } public ITask InitializeRepository() diff --git a/src/GitHub.Api/Installer/GitInstaller.cs b/src/GitHub.Api/Installer/GitInstaller.cs index 469b13437..772878462 100644 --- a/src/GitHub.Api/Installer/GitInstaller.cs +++ b/src/GitHub.Api/Installer/GitInstaller.cs @@ -73,7 +73,7 @@ public ITask SetupGitIfNeeded() { return VerifyPortableGitInstallation(); }) - { Name = "Git Installation - Extract" }; + { Name = "Git Installation - Verify" }; } startTask = startTask.Then(new FuncTask(cancellationToken, (success, installState) => diff --git a/unity/PackageProject/.gitignore b/unity/PackageProject/.gitignore index 9fac08e77..42cb35a28 100644 --- a/unity/PackageProject/.gitignore +++ b/unity/PackageProject/.gitignore @@ -5,6 +5,7 @@ *.xml *.local.json *.zip +*.md5 *.dylib *.so *.bundle diff --git a/unity/PackageProject/Assets/Plugins/GitHub/Editor/Resources/octorun.zip.md5 b/unity/PackageProject/Assets/Plugins/GitHub/Editor/Resources/octorun.zip.md5 deleted file mode 100644 index b10619984..000000000 --- a/unity/PackageProject/Assets/Plugins/GitHub/Editor/Resources/octorun.zip.md5 +++ /dev/null @@ -1 +0,0 @@ -7cdaa49008b8c996343e07670100bce2 \ No newline at end of file diff --git a/unity/TestProject/.gitignore b/unity/TestProject/.gitignore index 05006f52d..9d11e7781 100644 --- a/unity/TestProject/.gitignore +++ b/unity/TestProject/.gitignore @@ -8,6 +8,7 @@ *.dylib *.so *.bundle +*.md5 # ignoring this for now *.meta \ No newline at end of file diff --git a/unity/TestProject/Assets/Plugins/GitHub/Editor/Resources/octorun.zip.md5 b/unity/TestProject/Assets/Plugins/GitHub/Editor/Resources/octorun.zip.md5 deleted file mode 100644 index b10619984..000000000 --- a/unity/TestProject/Assets/Plugins/GitHub/Editor/Resources/octorun.zip.md5 +++ /dev/null @@ -1 +0,0 @@ -7cdaa49008b8c996343e07670100bce2 \ No newline at end of file