@@ -39,46 +39,96 @@ protected void Initialize()
39
39
Logging . TracingEnabled = UserSettings . Get ( Constants . TraceLoggingKey , false ) ;
40
40
ProcessManager = new ProcessManager ( Environment , Platform . GitEnvironment , CancellationToken ) ;
41
41
Platform . Initialize ( ProcessManager , TaskManager ) ;
42
- GitClient = new GitClient ( Environment , ProcessManager , TaskManager ) ;
42
+ GitClient = new GitClient ( Environment , ProcessManager , TaskManager . Token ) ;
43
43
SetupMetrics ( ) ;
44
44
}
45
45
46
46
public void Run ( bool firstRun )
47
- {
48
- new ActionTask ( SetupGit ( ) )
49
- . Then ( RestartRepository )
50
- . ThenInUI ( InitializeUI )
51
- . Start ( ) ;
52
- }
53
-
54
- private async Task SetupGit ( )
55
47
{
56
48
Logger . Trace ( "Run - CurrentDirectory {0}" , NPath . CurrentDirectory ) ;
57
49
58
- if ( Environment . GitExecutablePath == null )
59
- {
60
- Environment . GitExecutablePath = await DetermineGitExecutablePath ( ) ;
61
-
62
- Logger . Trace ( "Environment.GitExecutablePath \" {0}\" Exists:{1}" , Environment . GitExecutablePath , Environment . GitExecutablePath . FileExists ( ) ) ;
63
-
64
- if ( Environment . IsWindows )
65
- {
66
- var credentialHelper = await GitClient . GetConfig ( "credential.helper" , GitConfigSource . Global ) . StartAwait ( ) ;
50
+ var afterGitSetup = new ActionTask ( CancellationToken , RestartRepository )
51
+ . ThenInUI ( InitializeUI ) ;
67
52
53
+ //GitClient.GetConfig cannot be called until there is a git path set so it is wrapped in an ActionTask
54
+ var windowsCredentialSetup = new ActionTask ( CancellationToken , ( ) => {
55
+ GitClient . GetConfig ( "credential.helper" , GitConfigSource . Global ) . Then ( ( b , credentialHelper ) => {
68
56
if ( ! string . IsNullOrEmpty ( credentialHelper ) )
69
57
{
70
58
Logger . Trace ( "Windows CredentialHelper: {0}" , credentialHelper ) ;
59
+ afterGitSetup . Start ( ) ;
71
60
}
72
61
else
73
62
{
74
63
Logger . Warning ( "No Windows CredentialHeloper found: Setting to wincred" ) ;
75
64
76
- await GitClient . SetConfig ( "credential.helper" , "wincred" , GitConfigSource . Global ) . StartAwait ( ) ;
65
+ GitClient . SetConfig ( "credential.helper" , "wincred" , GitConfigSource . Global )
66
+ . Then ( ( ) => { afterGitSetup . Start ( ) ; } ) . Start ( ) ;
77
67
}
68
+ } ) . Start ( ) ;
69
+ } ) ;
70
+
71
+ var afterPathDetermined = new ActionTask < NPath > ( CancellationToken , ( b , path ) => {
72
+ Logger . Trace ( "Setting Environment git path: {0}" , path ) ;
73
+ Environment . GitExecutablePath = path ;
74
+ } ) . ThenInUI ( ( ) => {
75
+ Environment . User . Initialize ( GitClient ) ;
76
+
77
+ if ( Environment . IsWindows )
78
+ {
79
+ windowsCredentialSetup . Start ( ) ;
78
80
}
79
- }
81
+ else
82
+ {
83
+ afterGitSetup . Start ( ) ;
84
+ }
85
+ } ) ;
80
86
81
- Environment . User . Initialize ( GitClient ) ;
87
+
88
+ var gitExecutablePath = SystemSettings . Get ( Constants . GitInstallPathKey ) ? . ToNPath ( ) ;
89
+ if ( gitExecutablePath != null && gitExecutablePath . FileExists ( ) )
90
+ {
91
+ Logger . Trace ( "Using git install path from settings: {0}" , gitExecutablePath ) ;
92
+
93
+ new FuncTask < NPath > ( CancellationToken , ( ) => gitExecutablePath )
94
+ . Then ( afterPathDetermined )
95
+ . Start ( ) ;
96
+ }
97
+ else
98
+ {
99
+ Logger . Trace ( "No git path found in settings" ) ;
100
+
101
+ var findExecTask = new FindExecTask ( "git" , CancellationToken )
102
+ . Finally ( ( b , ex , path ) => {
103
+ if ( b && path != null )
104
+ {
105
+ Logger . Trace ( "FindExecTask Success: {0}" , path ) ;
106
+
107
+ new FuncTask < NPath > ( CancellationToken , ( ) => path )
108
+ . Then ( afterPathDetermined )
109
+ . Start ( ) ;
110
+ }
111
+ else
112
+ {
113
+ Logger . Warning ( "FindExecTask Failure" ) ;
114
+ Logger . Error ( "Git not found" ) ;
115
+ }
116
+ } ) ;
117
+
118
+ var applicationDataPath = Environment . GetSpecialFolder ( System . Environment . SpecialFolder . LocalApplicationData ) . ToNPath ( ) ;
119
+ var installDetails = new GitInstallDetails ( applicationDataPath , true ) ;
120
+ var gitInstaller = new GitInstaller ( Environment , CancellationToken , installDetails ) ;
121
+
122
+ gitInstaller . SetupGitIfNeeded ( new ActionTask < NPath > ( CancellationToken , ( b , path ) => {
123
+ Logger . Trace ( "GitInstaller Success: {0}" , path ) ;
124
+ new FuncTask < NPath > ( CancellationToken , ( ) => path )
125
+ . Then ( afterPathDetermined )
126
+ . Start ( ) ;
127
+ } ) , new ActionTask ( CancellationToken , ( ) => {
128
+ Logger . Warning ( "GitInstaller Failure" ) ;
129
+ findExecTask . Start ( ) ;
130
+ } ) ) ;
131
+ }
82
132
}
83
133
84
134
public ITask InitializeRepository ( )
@@ -136,27 +186,6 @@ public void RestartRepository()
136
186
}
137
187
}
138
188
139
- private async Task < NPath > DetermineGitExecutablePath ( ProgressReport progress = null )
140
- {
141
- var gitExecutablePath = SystemSettings . Get ( Constants . GitInstallPathKey ) ? . ToNPath ( ) ;
142
- if ( gitExecutablePath != null && gitExecutablePath . FileExists ( ) )
143
- {
144
- Logger . Trace ( "Using git install path from settings" ) ;
145
- return gitExecutablePath ;
146
- }
147
-
148
- var gitInstaller = new GitInstaller ( Environment , CancellationToken ) ;
149
- var setupDone = await gitInstaller . SetupIfNeeded ( progress ? . Percentage , progress ? . Remaining ) ;
150
- if ( setupDone )
151
- {
152
- Logger . Trace ( "Setup performed using new path" ) ;
153
- return gitInstaller . GitExecutablePath ;
154
- }
155
-
156
- Logger . Trace ( "Finding git install path" ) ;
157
- return await GitClient . FindGitInstallation ( ) . SafeAwait ( ) ;
158
- }
159
-
160
189
protected void SetupMetrics ( string unityVersion , bool firstRun )
161
190
{
162
191
Logger . Trace ( "Setup metrics" ) ;
0 commit comments