Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit bd19997

Browse files
committed
Fix running the installation tasks on start
1 parent 7215176 commit bd19997

File tree

1 file changed

+44
-48
lines changed

1 file changed

+44
-48
lines changed

src/GitHub.Api/Application/ApplicationManagerBase.cs

Lines changed: 44 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -52,82 +52,78 @@ protected void Initialize()
5252
public void Run(bool firstRun)
5353
{
5454
Logger.Trace("Run - CurrentDirectory {0}", NPath.CurrentDirectory);
55+
isBusy = true;
56+
57+
var endTask = new ActionTask<GitInstaller.GitInstallationState>(CancellationToken,
58+
(_, state) => InitializeEnvironment(state))
59+
{ Affinity = TaskAffinity.UI };
5560

5661
ITask<string> setExistingEnvironmentPath;
5762
if (Environment.IsMac)
5863
{
5964
setExistingEnvironmentPath = new SimpleProcessTask(CancellationToken, "bash".ToNPath(), "-c \"/usr/libexec/path_helper\"")
6065
.Configure(ProcessManager, dontSetupGit: true)
6166
.Catch(e => true) // make sure this doesn't throw if the task fails
62-
.Then((success, path) => success ? path.Split(new[] { "\"" }, StringSplitOptions.None)[1] : null);
67+
.Then((success, path) => success ? path?.Split(new[] { "\"" }, StringSplitOptions.None)[1] : null);
6368
}
6469
else
6570
{
6671
setExistingEnvironmentPath = new FuncTask<string>(CancellationToken, () => null);
6772
}
6873

69-
setExistingEnvironmentPath.OnEnd += (t, path, success, ex) => {
74+
setExistingEnvironmentPath.OnEnd += (t, path, success, ex) =>
75+
{
7076
if (path != null)
7177
{
7278
Logger.Trace("Existing Environment Path Original:{0} Updated:{1}", Environment.Path, path);
7379
Environment.Path = path;
7480
}
7581
};
7682

77-
var initEnvironmentTask = new ActionTask<GitInstaller.GitInstallationState>(CancellationToken,
78-
(_, state) => InitializeEnvironment(state))
79-
{ Affinity = TaskAffinity.UI };
80-
81-
isBusy = true;
83+
var setupOctorun = new OctorunInstaller(Environment, TaskManager).SetupOctorunIfNeeded();
84+
var setOctorunEnvironment = new ActionTask<NPath>(CancellationToken,
85+
(s, octorunPath) => Environment.OctorunScriptPath = octorunPath);
8286

83-
var octorunInstaller = new OctorunInstaller(Environment, TaskManager);
84-
var setupTask = setExistingEnvironmentPath.Then(octorunInstaller.SetupOctorunIfNeeded());
85-
86-
var initializeGitTask = new FuncTask<NPath>(CancellationToken, () =>
87-
{
88-
var gitExecutablePath = SystemSettings.Get(Constants.GitInstallPathKey)?.ToNPath();
89-
if (gitExecutablePath.HasValue && gitExecutablePath.Value.FileExists()) // we have a git path
90-
{
91-
Logger.Trace("Using git install path from settings: {0}", gitExecutablePath);
92-
return gitExecutablePath.Value;
93-
}
94-
return NPath.Default;
95-
});
96-
var setOctorunEnvironmentTask = new ActionTask<NPath>(CancellationToken, (s, octorunPath) =>
87+
var getGitFromSettings = new FuncTask<NPath>(CancellationToken, () =>
88+
{
89+
var gitExecutablePath = SystemSettings.Get(Constants.GitInstallPathKey)?.ToNPath();
90+
if (gitExecutablePath.HasValue && gitExecutablePath.Value.FileExists()) // we have a git path
9791
{
98-
Environment.OctorunScriptPath = octorunPath;
99-
});
92+
Logger.Trace("Using git install path from settings: {0}", gitExecutablePath);
93+
return gitExecutablePath.Value;
94+
}
95+
return NPath.Default;
96+
});
10097

101-
setupTask.OnEnd += (t, path, _, __) =>
98+
getGitFromSettings.OnEnd += (t, path, _, __) =>
99+
{
100+
if (path.IsInitialized)
102101
{
103-
t.GetEndOfChain().Then(setOctorunEnvironmentTask).Then(initializeGitTask);
104-
};
102+
var state = new GitInstaller.GitInstallationState { GitExecutablePath = path };
103+
endTask.PreviousResult = state;
104+
endTask.Start();
105+
return;
106+
}
107+
Logger.Trace("Using portable git");
105108

106-
initializeGitTask.OnEnd += (t, path, _, __) =>
109+
var setupGit = new GitInstaller(Environment, ProcessManager, TaskManager).SetupGitIfNeeded();
110+
setupGit.Finally((s, state) =>
107111
{
108-
if (path.IsInitialized)
109-
{
110-
t.GetEndOfChain()
111-
.Then(initEnvironmentTask, taskIsTopOfChain: true);
112-
return;
113-
}
114-
Logger.Trace("Using portable git");
115-
116-
var gitInstaller = new GitInstaller(Environment, ProcessManager, TaskManager);
117-
118-
var task = gitInstaller.SetupGitIfNeeded();
119-
task.Progress(progressReporter.UpdateProgress);
120-
task.OnEnd += (thisTask, result, success, exception) =>
121-
{
122-
thisTask.GetEndOfChain()
123-
.Then(initEnvironmentTask, taskIsTopOfChain: true);
124-
};
112+
endTask.PreviousResult = state;
113+
endTask.Start();
114+
});
115+
setupGit.Progress(progressReporter.UpdateProgress);
116+
// append installer task to top chain
117+
t.Then(setupGit);
118+
};
125119

126-
// append installer task to top chain
127-
t.Then(task, taskIsTopOfChain: true);
128-
};
120+
var setupChain = setExistingEnvironmentPath.Then(setupOctorun);
121+
setupChain.OnEnd += (t, path, _, __) =>
122+
{
123+
t.GetEndOfChain().Then(setOctorunEnvironment).Then(getGitFromSettings);
124+
};
129125

130-
setupTask.Start();
126+
setupChain.Start();
131127
}
132128

133129
public ITask InitializeRepository()

0 commit comments

Comments
 (0)