@@ -9,7 +9,7 @@ namespace GitHub.Unity
99 interface IGitClient
1010 {
1111 Task < NPath > FindGitInstallation ( ) ;
12- bool ValidateGitInstall ( NPath path ) ;
12+ ITask < ValidateGitInstallResult > ValidateGitInstall ( NPath path ) ;
1313
1414 ITask Init ( IOutputProcessor < string > processor = null ) ;
1515
@@ -77,6 +77,10 @@ ITask<string> Unlock(string file, bool force,
7777 IOutputProcessor < string > processor = null ) ;
7878
7979 ITask < List < GitLogEntry > > Log ( BaseOutputListProcessor < GitLogEntry > processor = null ) ;
80+
81+ ITask < Version > Version ( IOutputProcessor < Version > processor = null ) ;
82+
83+ ITask < Version > LfsVersion ( IOutputProcessor < Version > processor = null ) ;
8084 }
8185
8286 class GitClient : IGitClient
@@ -87,7 +91,6 @@ class GitClient : IGitClient
8791 private readonly ITaskManager taskManager ;
8892 private readonly CancellationToken cancellationToken ;
8993
90-
9194 public GitClient ( IEnvironment environment , IProcessManager processManager ,
9295 ICredentialManager credentialManager , ITaskManager taskManager )
9396 {
@@ -167,9 +170,28 @@ private async Task<NPath> LookForSystemGit()
167170 return path ;
168171 }
169172
170- public bool ValidateGitInstall ( NPath path )
173+ public ITask < ValidateGitInstallResult > ValidateGitInstall ( NPath path )
171174 {
172- return path . FileExists ( ) ;
175+ if ( ! path . FileExists ( ) )
176+ {
177+ return new FuncTask < ValidateGitInstallResult > ( TaskEx . FromResult ( new ValidateGitInstallResult ( false , null , null ) ) ) ;
178+ }
179+
180+ Version gitVersion = null ;
181+ Version gitLfsVersion = null ;
182+
183+ var gitVersionTask = new GitVersionTask ( cancellationToken ) . Configure ( processManager , path ) ;
184+ var gitLfsVersionTask = new GitLfsVersionTask ( cancellationToken ) . Configure ( processManager , path ) ;
185+
186+ return gitVersionTask
187+ . Then ( ( result , version ) => gitVersion = version )
188+ . Then ( gitLfsVersionTask )
189+ . Then ( ( result , version ) => gitLfsVersion = version )
190+ . Then ( success => new ValidateGitInstallResult ( success &&
191+ gitVersion ? . CompareTo ( Constants . MinimumGitVersion ) >= 0 &&
192+ gitLfsVersion ? . CompareTo ( Constants . MinimumGitLfsVersion ) >= 0 ,
193+ gitVersion , gitLfsVersion )
194+ ) ;
173195 }
174196
175197 public ITask Init ( IOutputProcessor < string > processor = null )
@@ -202,6 +224,22 @@ public ITask<List<GitLogEntry>> Log(BaseOutputListProcessor<GitLogEntry> process
202224 . Configure ( processManager ) ;
203225 }
204226
227+ public ITask < Version > Version ( IOutputProcessor < Version > processor = null )
228+ {
229+ Logger . Trace ( "Version" ) ;
230+
231+ return new GitVersionTask ( cancellationToken , processor )
232+ . Configure ( processManager ) ;
233+ }
234+
235+ public ITask < Version > LfsVersion ( IOutputProcessor < Version > processor = null )
236+ {
237+ Logger . Trace ( "LfsVersion" ) ;
238+
239+ return new GitLfsVersionTask ( cancellationToken , processor )
240+ . Configure ( processManager ) ;
241+ }
242+
205243 public ITask < string > GetConfig ( string key , GitConfigSource configSource , IOutputProcessor < string > processor = null )
206244 {
207245 Logger . Trace ( "GetConfig" ) ;
0 commit comments