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); } }
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); } }
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); } }
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); } }
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); } }
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); } }