Exemplo n.º 1
0
        public async Task <int> Run(RepositorySettings repository,
                                    UsernamePasswordCredentials gitCreds,
                                    Identity userIdentity,
                                    SettingsContainer settings)
        {
            try
            {
                var repo = await BuildGitRepositorySpec(repository, gitCreds.Username);

                if (repo == null)
                {
                    return(0);
                }

                if (!await _repositoryFilter.ContainsDotNetProjects(repository))
                {
                    return(0);
                }

                var tempFolder = _folderFactory.UniqueTemporaryFolder();
                var git        = new LibGit2SharpDriver(_logger, tempFolder, gitCreds, userIdentity);

                var updatesDone = await _repositoryUpdater.Run(git, repo, settings);

                tempFolder.TryDelete();
                return(updatesDone);
            }
            catch (Exception ex)
            {
                _logger.Error($"Failed on repo {repository.RepositoryName}", ex);
                return(0);
            }
        }
Exemplo n.º 2
0
        public async Task <int> Run(RepositorySettings repository,
                                    UsernamePasswordCredentials gitCreds,
                                    Identity userIdentity,
                                    SettingsContainer settings)
        {
            try
            {
                var repo = await BuildGitRepositorySpec(repository, gitCreds.Username);

                if (repo == null)
                {
                    return(0);
                }

                // should perform the remote check for "is this a .NET repo"
                // (and also not a github fork)
                // only when we have multiple remote repos
                // otherwise it's ok to work locally, and check there
                if (!(settings.SourceControlServerSettings.Scope == ServerScope.Repository || repository.IsLocalRepo))
                {
                    var remoteRepoContainsDotNet = await _repositoryFilter.ContainsDotNetProjects(repository);

                    if (!remoteRepoContainsDotNet)
                    {
                        return(0);
                    }
                }

                IFolder folder;
                if (repository.IsLocalRepo)
                {
                    folder = new Folder(_logger, new DirectoryInfo(repository.RemoteInfo.LocalRepositoryUri.AbsolutePath));
                    settings.WorkingFolder = new Folder(_logger, new DirectoryInfo(repository.RemoteInfo.WorkingFolder.AbsolutePath));
                    repo.DefaultBranch     = repository.RemoteInfo.BranchName;
                    repo.Remote            = repository.RemoteInfo.RemoteName;
                }
                else
                {
                    folder = _folderFactory.UniqueTemporaryFolder();
                    settings.WorkingFolder = folder;
                }

                var git = new LibGit2SharpDriver(_logger, folder, gitCreds, userIdentity);

                var updatesDone = await _repositoryUpdater.Run(git, repo, settings);

                if (!repository.IsLocalRepo)
                {
                    folder.TryDelete();
                }

                return(updatesDone);
            }
            catch (Exception ex)
            {
                _logger.Error($"Failed on repo {repository.RepositoryName}", ex);
                return(1);
            }
        }
Exemplo n.º 3
0
        public async Task GetNewCommitMessages()
        {
            // in this test we assume the Nukeeper repo has at least 2 branches and one of them is master.
            // if not, the test will return OK (because we cannot run it)
            var repoUri = "https://github.com/NuKeeperDotNet/NuKeeper.git";

            var folder = TestDirectoryHelper.UniqueTemporaryFolder();

            try
            {
                var creds         = new Abstractions.Git.GitUsernamePasswordCredentials();
                var cmdGitDriver  = new GitCmdDriver(_pathToGit, _logger, new Folder(_logger, folder), creds);
                var origGitDriver = new LibGit2SharpDriver(_logger, new Folder(_logger, folder), creds, null);

                // get the repo
                await origGitDriver.Clone(new Uri(repoUri));

                // get the remote branches, use git directly to avoid having to dress up a platform
                var gitOutput = await StartGitProcess("branch -r", folder.FullName);

                var branchNames = gitOutput.Split('\n')
                                  .Select(b => b.Trim()).ToArray();

                var master = branchNames.Where(b => b.EndsWith("/master", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
                if (master != null && branchNames.Count() > 1)
                {
                    var headBranch      = branchNames.First(b => !b.Equals(master, StringComparison.InvariantCultureIgnoreCase));
                    var localHeadBranch = Regex.Replace(headBranch, "^origin/", "");

                    // We have chosen the head branche here, lets check it out.
                    await cmdGitDriver.CheckoutRemoteToLocal(localHeadBranch);

                    // finally start the test
                    var origMessages = await origGitDriver.GetNewCommitMessages("master", localHeadBranch);

                    var cmdMessages = await cmdGitDriver.GetNewCommitMessages("master", localHeadBranch);

                    var origMessagesArray = origMessages.ToArray();
                    var cmdMessagesArray  = cmdMessages.ToArray();

                    Assert.AreEqual(origMessagesArray, cmdMessagesArray, "GitCmdDriver does not return the right amount of messages");

                    foreach (var message in origMessages)
                    {
                        Assert.IsTrue(cmdMessages.Contains(message), $"GitCmdDriver does not return commit message {message}");
                    }
                }
            }
            finally
            {
                TestDirectoryHelper.DeleteDirectory(folder);
            }
        }
Exemplo n.º 4
0
        public async Task <int> Run(RepositorySettings repository,
                                    UsernamePasswordCredentials gitCreds,
                                    Identity userIdentity,
                                    SettingsContainer settings)
        {
            try
            {
                var repo = await BuildGitRepositorySpec(repository, gitCreds.Username);

                if (repo == null)
                {
                    return(0);
                }

                if (!repository.IsLocalRepo) // The updaters will do the check for the local files, and they know what file types they can handle.
                {
                    if (!await _repositoryFilter.ContainsDotNetProjects(repository))
                    {
                        return(0);
                    }
                }

                IFolder folder;
                if (repository.IsLocalRepo)
                {
                    folder = new Folder(_logger, new DirectoryInfo(repository.RemoteInfo.LocalRepositoryUri.AbsolutePath));
                    settings.WorkingFolder = new Folder(_logger, new DirectoryInfo(repository.RemoteInfo.WorkingFolder.AbsolutePath));
                    repo.DefaultBranch     = repository.RemoteInfo.BranchName;
                    repo.Remote            = repository.RemoteInfo.RemoteName;
                }
                else
                {
                    folder = _folderFactory.UniqueTemporaryFolder();
                    settings.WorkingFolder = folder;
                }

                var git = new LibGit2SharpDriver(_logger, folder, gitCreds, userIdentity);

                var updatesDone = await _repositoryUpdater.Run(git, repo, settings);

                if (!repository.IsLocalRepo)
                {
                    folder.TryDelete();
                }

                return(updatesDone);
            }
            catch (Exception ex)
            {
                _logger.Error($"Failed on repo {repository.RepositoryName}", ex);
                return(1);
            }
        }
Exemplo n.º 5
0
        public async Task Run(RepositorySettings repository, UsernamePasswordCredentials gitCreds)
        {
            try
            {
                var repo = await BuildGitRepositorySpec(repository, gitCreds.Username);

                if (repo == null)
                {
                    return;
                }

                var tempFolder = _folderFactory.UniqueTemporaryFolder();
                var git        = new LibGit2SharpDriver(_logger, tempFolder, gitCreds);

                await _repositoryUpdater.Run(git, repo);

                tempFolder.TryDelete();
            }
            catch (Exception ex)
            {
                _logger.Error($"Failed on repo {repository.RepositoryName}", ex);
            }
        }
Exemplo n.º 6
0
        public async Task <int> Run(RepositorySettings repository,
                                    GitUsernamePasswordCredentials credentials,
                                    SettingsContainer settings, User user)
        {
            try
            {
                var repositoryData = await BuildGitRepositorySpec(repository, credentials.Username);

                if (repositoryData == null)
                {
                    return(0);
                }

                // should perform the remote check for "is this a .NET repo"
                // (and also not a github fork)
                // only when we have multiple remote repos
                // otherwise it's ok to work locally, and check there
                if (!(settings.SourceControlServerSettings.Scope == ServerScope.Repository || repository.IsLocalRepo))
                {
                    var remoteRepoContainsDotNet = await _repositoryFilter.ContainsDotNetProjects(repository);

                    if (!remoteRepoContainsDotNet)
                    {
                        return(0);
                    }
                }

                IFolder folder;
                if (repository.IsLocalRepo)
                {
                    folder = new Folder(_logger, new DirectoryInfo(repository.RemoteInfo.LocalRepositoryUri.AbsolutePath));
                    settings.WorkingFolder     = new Folder(_logger, new DirectoryInfo(repository.RemoteInfo.WorkingFolder.AbsolutePath));
                    repositoryData.IsLocalRepo = repository.IsLocalRepo;

                    if (!repositoryData.IsFork) //check if we are on a fork. If not on a fork we set the remote to the locally found remote
                    {
                        repositoryData.Remote = repository.RemoteInfo.RemoteName;
                    }
                }
                else
                {
                    folder = _folderFactory.UniqueTemporaryFolder();
                    settings.WorkingFolder = folder;
                }

                if (!string.IsNullOrEmpty(repository.RemoteInfo?.BranchName))
                {
                    repositoryData.DefaultBranch = repository.RemoteInfo.BranchName;
                }

                var git = new LibGit2SharpDriver(_logger, folder, credentials, user);

                var updatesDone = await _repositoryUpdater.Run(git, repositoryData, settings);

                if (!repository.IsLocalRepo)
                {
                    folder.TryDelete();
                }

                return(updatesDone);
            }
#pragma warning disable CA1031
            catch (Exception ex)
#pragma warning restore CA1031
            {
                _logger.Error($"Failed on repo {repository.RepositoryName}", ex);
                return(1);
            }
        }