private NGit.Api.Git GetClient(ISourceControlConnectionSettingsSource settings)
{
var repositoryFolder = GetLocalRepository(settings);
if (IsRepositoryUriChanged(repositoryFolder, settings))
{
repositoryFolder.Delete();
repositoryFolder = GitRepositoryFolder.Create(settings.Uri);
_folder.ReplaceWith(repositoryFolder);
}
NGit.Api.Git nativeGit;
try
{
var credentialsProvider = new UsernamePasswordCredentialsProvider(settings.Login, settings.Password);
if (repositoryFolder.Exists())
{
string path = repositoryFolder.GetAbsolutePath();
nativeGit = NGit.Api.Git.Open(path);
}
else
{
string path = repositoryFolder.GetAbsolutePath();
nativeGit = NGit.Api.Git.CloneRepository()
.SetURI(settings.Uri)
.SetNoCheckout(true)
.SetCredentialsProvider(credentialsProvider)
.SetDirectory(path).Call();
}
}
catch (EOFException ex)
{
throw new InvalidOperationException("Unable to connect to repository. Run 'git fsck' in the repository to check for possible errors.", ex);
}
catch (ArgumentNullException exception)
{
throw new ArgumentException(
GitCheckConnectionErrorResolver.INVALID_URI_OR_INSUFFICIENT_ACCESS_RIGHTS_ERROR_MESSAGE, exception);
}
return nativeGit;
}