@@ -30,14 +30,13 @@ public GitInstaller(IEnvironment environment, IProcessManager processManager,
30
30
public ITask < GitInstallationState > SetupGitIfNeeded ( )
31
31
{
32
32
//Logger.Trace("SetupGitIfNeeded");
33
-
33
+ GitInstallationState installationState = new GitInstallationState ( ) ;
34
34
installationTask = new FuncTask < GitInstallationState , GitInstallationState > ( cancellationToken , ( success , path ) => path )
35
35
{ Name = "Git Installation - Complete" } ;
36
36
installationTask . OnStart += thisTask => thisTask . UpdateProgress ( 0 , 100 ) ;
37
37
installationTask . OnEnd += ( thisTask , result , success , exception ) => thisTask . UpdateProgress ( 100 , 100 ) ;
38
38
39
39
ITask < GitInstallationState > startTask = null ;
40
- GitInstallationState installationState = new GitInstallationState ( ) ;
41
40
if ( ! environment . IsWindows )
42
41
{
43
42
var findTask = new FindExecTask ( "git" , cancellationToken )
@@ -72,37 +71,47 @@ public ITask<GitInstallationState> SetupGitIfNeeded()
72
71
{
73
72
startTask = new FuncTask < GitInstallationState > ( cancellationToken , ( ) =>
74
73
{
75
- installationState = VerifyGitInstallation ( ) ;
76
- if ( ! installationState . GitIsValid && ! installationState . GitLfsIsValid )
77
- installationState = GrabZipFromResources ( installationState ) ;
78
- else
79
- Logger . Trace ( "SetupGitIfNeeded: Skipped" ) ;
80
- return installationState ;
74
+ return VerifyPortableGitInstallation ( ) ;
81
75
} )
82
76
{ Name = "Git Installation - Extract" } ;
83
77
}
84
78
79
+ startTask = startTask . Then ( new FuncTask < GitInstallationState , GitInstallationState > ( cancellationToken , ( success , installState ) =>
80
+ {
81
+ if ( installState . GitIsValid && installState . GitLfsIsValid )
82
+ {
83
+ return installState ;
84
+ }
85
+
86
+ installState = VerifyZipFiles ( installState ) ;
87
+ installState = GrabZipFromResourcesIfNeeded ( installState ) ;
88
+ return installState ;
89
+ } )
90
+ { Name = "Git Installation - Validate" }
91
+ ) ;
92
+
85
93
startTask . OnEnd += ( thisTask , installState , success , exception ) =>
86
94
{
87
- if ( ! installState . GitIsValid && ! installState . GitLfsIsValid )
95
+ if ( installState . GitIsValid && installState . GitLfsIsValid )
88
96
{
89
- if ( ! installState . GitZipExists || ! installState . GitLfsZipExists )
90
- thisTask = thisTask . Then ( CreateDownloadTask ( installState ) ) ;
91
- thisTask = thisTask . Then ( ExtractPortableGit ( installState ) ) ;
97
+ Logger . Trace ( "Skipping git installation" ) ;
98
+ thisTask . Then ( installationTask ) ;
99
+ return ;
92
100
}
93
- thisTask = thisTask . Then ( installationTask ) ;
101
+
102
+ var downloadZipTask = DownloadZipsIfNeeded ( installState ) ;
103
+ downloadZipTask . OnEnd += ExtractPortableGit ;
104
+ thisTask . Then ( downloadZipTask ) ;
94
105
} ;
95
106
96
107
return startTask ;
97
108
}
98
109
99
- private GitInstallationState VerifyGitInstallation ( )
110
+ private GitInstallationState VerifyPortableGitInstallation ( )
100
111
{
101
112
var state = new GitInstallationState ( ) ;
102
113
var gitExists = installDetails . GitExecutablePath . IsInitialized && installDetails . GitExecutablePath . FileExists ( ) ;
103
114
var gitLfsExists = installDetails . GitLfsExecutablePath . IsInitialized && installDetails . GitLfsExecutablePath . FileExists ( ) ;
104
- state . GitZipExists = installDetails . GitZipPath . FileExists ( ) ;
105
- state . GitLfsZipExists = installDetails . GitLfsZipPath . FileExists ( ) ;
106
115
107
116
if ( gitExists )
108
117
{
@@ -144,26 +153,44 @@ private GitInstallationState VerifyGitInstallation()
144
153
return state ;
145
154
}
146
155
147
- private GitInstallationState GrabZipFromResources ( GitInstallationState state )
156
+ private GitInstallationState VerifyZipFiles ( GitInstallationState state )
157
+ {
158
+ var md5 = AssemblyResources . ToFile ( ResourceType . Platform , "git.zip.md5" , installDetails . ZipPath , environment ) ;
159
+ if ( ! md5 . FileExists ( ) || ( installDetails . GitZipPath . FileExists ( ) && ! Utils . VerifyFileIntegrity ( installDetails . GitZipPath , md5 ) ) )
160
+ {
161
+ installDetails . GitZipPath . DeleteIfExists ( ) ;
162
+ }
163
+ state . GitZipExists = installDetails . GitZipPath . FileExists ( ) ;
164
+
165
+ md5 = AssemblyResources . ToFile ( ResourceType . Platform , "git-lfs.zip.md5" , installDetails . ZipPath , environment ) ;
166
+ // check whether the git-lfs zip file exists and is valid
167
+ if ( ! md5 . FileExists ( ) || ( installDetails . GitLfsZipPath . FileExists ( ) && ! Utils . VerifyFileIntegrity ( installDetails . GitLfsZipPath , md5 ) ) )
168
+ {
169
+ installDetails . GitLfsZipPath . DeleteIfExists ( ) ;
170
+ }
171
+ state . GitLfsZipExists = installDetails . GitLfsZipPath . FileExists ( ) ;
172
+ installationTask . UpdateProgress ( 20 , 100 ) ;
173
+ return state ;
174
+ }
175
+
176
+ private GitInstallationState GrabZipFromResourcesIfNeeded ( GitInstallationState state )
148
177
{
149
178
if ( ! state . GitZipExists )
150
179
{
151
180
AssemblyResources . ToFile ( ResourceType . Platform , "git.zip" , installDetails . ZipPath , environment ) ;
152
- AssemblyResources . ToFile ( ResourceType . Platform , "git.zip.md5" , installDetails . ZipPath , environment ) ;
153
181
}
154
182
state . GitZipExists = installDetails . GitZipPath . FileExists ( ) ;
155
183
156
184
if ( ! state . GitLfsZipExists )
157
185
{
158
186
AssemblyResources . ToFile ( ResourceType . Platform , "git-lfs.zip" , installDetails . ZipPath , environment ) ;
159
- AssemblyResources . ToFile ( ResourceType . Platform , "git-lfs.zip.md5" , installDetails . ZipPath , environment ) ;
160
187
}
161
188
state . GitLfsZipExists = installDetails . GitLfsZipPath . FileExists ( ) ;
162
- installationTask . UpdateProgress ( 20 , 100 ) ;
189
+ installationTask . UpdateProgress ( 30 , 100 ) ;
163
190
return state ;
164
191
}
165
192
166
- private ITask < GitInstallationState > CreateDownloadTask ( GitInstallationState state )
193
+ private ITask < GitInstallationState > DownloadZipsIfNeeded ( GitInstallationState state )
167
194
{
168
195
var downloader = new Downloader ( ) ;
169
196
downloader . Catch ( e => true ) ;
@@ -180,7 +207,8 @@ private ITask<GitInstallationState> CreateDownloadTask(GitInstallationState stat
180
207
} ) ;
181
208
}
182
209
183
- private FuncTask < GitInstallationState > ExtractPortableGit ( GitInstallationState state )
210
+ private void ExtractPortableGit ( ITask < GitInstallationState > thisTask ,
211
+ GitInstallationState state , bool s , Exception exception )
184
212
{
185
213
ITask < NPath > task = null ;
186
214
var tempZipExtractPath = NPath . CreateTempDirectory ( "git_zip_extract_zip_paths" ) ;
@@ -252,7 +280,9 @@ private FuncTask<GitInstallationState> ExtractPortableGit(GitInstallationState s
252
280
endTask = task . Then ( endTask ) ;
253
281
}
254
282
255
- return endTask ;
283
+ thisTask
284
+ . Then ( endTask )
285
+ . Then ( installationTask ) ;
256
286
}
257
287
258
288
public class GitInstallationState
0 commit comments