public async Task <RepositorySource> Clone(CloneRequest cloneRequest, CancellationToken cancellationToken = default)
        {
            var existingRepository =
                _fileRepository.GetServiceRepositories(Domains.BitBucket, cloneRequest.GetRepositoriesRequest.User) ?? new RepositorySource
            {
                Name   = cloneRequest.GetRepositoriesRequest.User,
                Domain = Domains.BitBucket,
                Source = Sources.BitBucket
            };

            var existingSlugs = existingRepository.Repositories.Select(s => s.Slug).ToList();

            var repositories = await _bitBucketClient.GetRepositoriesAsync(cloneRequest.GetRepositoriesRequest, cancellationToken);

            var repositoriesToAdd = repositories
                                    .ToRepositories(cloneRequest.CloneDirectory)
                                    .Where(rep => !existingSlugs.Contains(rep.Slug))
                                    .ToList();

            foreach (var cloneProcess in repositoriesToAdd
                     .Select(repo => new
            {
                RunnableProcess = RepositoryManager
                                  .Clone(Git.Models.Clone.Create(repo.Local.Location, repo.Origin.Location, repo.Local.Name))
                                  .ToRunnableProcess(),
                Repo = repo
            }))
            {
                Console.WriteLine($"Cloning: {cloneProcess.Repo.Slug} into: {cloneProcess.Repo.Local.Location}");
                cloneProcess.RunnableProcess.Start();
                Console.WriteLine($"Cloned: {cloneProcess.Repo.Slug} into: {cloneProcess.Repo.Local.Location}");
            }

            existingRepository.Repositories.AddRange(repositoriesToAdd);

            _repositoryRegisterManager.UpdateRegister(existingRepository.GetFileName());
            return(_fileRepository.WriteServiceRepositories(existingRepository));
        }