public GitHubForkFinder(ICollaborationPlatform collaborationPlatform, INuKeeperLogger logger, ForkMode forkMode) { _collaborationPlatform = collaborationPlatform; _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _forkMode = forkMode; _logger.Detailed($"FindPushFork. Fork Mode is {_forkMode}"); }
public GitHubForkFinder(ICollaborationPlatform collaborationPlatform, INuKeeperLogger logger, ForkMode forkMode) { _collaborationPlatform = collaborationPlatform; _logger = logger; _forkMode = forkMode; _logger.Detailed($"FindPushFork. Fork Mode is {_forkMode}"); }
public BitbucketForkFinder(ICollaborationPlatform collaborationPlatform, INuKeeperLogger logger, ForkMode forkMode) { if (forkMode != ForkMode.SingleRepositoryOnly) { throw new ArgumentOutOfRangeException(nameof(forkMode), $"{_forkMode} has not yet been implemented"); } _collaborationPlatform = collaborationPlatform; _logger = logger; _forkMode = forkMode; _logger.Detailed($"FindPushFork. Fork Mode is {_forkMode}"); }
private async Task <ForkData> FindUpstreamRepoOnly(ForkMode forkMode, ForkData pullFork) { // Only want to pull and push from the same origin repo. var canUseOriginRepo = await IsPushableRepo(pullFork); if (canUseOriginRepo) { _logger.Normal($"Using upstream fork as push, for user {pullFork.Owner} at {pullFork.Uri}"); return(pullFork); } NoPushableForkFound(forkMode, pullFork.Name); return(null); }
private async Task <RepositoryData> BuildGitRepositorySpec( RepositorySettings repository, ForkMode forkMode, string userName) { var pullFork = new ForkData(repository.GithubUri, repository.RepositoryOwner, repository.RepositoryName); var pushFork = await _forkFinder.FindPushFork(forkMode, userName, pullFork); if (pushFork == null) { _logger.Normal($"No pushable fork found for {repository.GithubUri}"); return(null); } return(new RepositoryData(pullFork, pushFork)); }
public async Task <ForkData> FindPushFork(ForkMode forkMode, string userName, ForkData fallbackFork) { _logger.Detailed($"FindPushFork. Fork Mode is {forkMode}"); switch (forkMode) { case ForkMode.PreferFork: return(await FindUserForkOrUpstream(forkMode, userName, fallbackFork)); case ForkMode.PreferSingleRepository: return(await FindUpstreamRepoOrUserFork(forkMode, userName, fallbackFork)); case ForkMode.SingleRepositoryOnly: return(await FindUpstreamRepoOnly(forkMode, fallbackFork)); default: throw new ArgumentOutOfRangeException($"Unknown fork mode: {forkMode}"); } }
private async Task <ForkData> FindUserForkOrUpstream(ForkMode forkMode, string userName, ForkData pullFork) { var userFork = await TryFindUserFork(userName, pullFork); if (userFork != null) { return(userFork); } // as a fallback, we want to pull and push from the same origin repo. var canUseOriginRepo = await IsPushableRepo(pullFork); if (canUseOriginRepo) { _logger.Normal($"No fork for user {userName}. Using upstream fork for user {pullFork.Owner} at {pullFork.Uri}"); return(pullFork); } NoPushableForkFound(forkMode, pullFork.Name); return(null); }
private async Task <ForkData> FindUpstreamRepoOrUserFork(ForkMode forkMode, string userName, ForkData pullFork) { // prefer to pull and push from the same origin repo. var canUseOriginRepo = await IsPushableRepo(pullFork); if (canUseOriginRepo) { _logger.Normal($"Using upstream fork as push, for user {pullFork.Owner} at {pullFork.Uri}"); return(pullFork); } // fall back to trying a fork var userFork = await TryFindUserFork(userName, pullFork); if (userFork != null) { return(userFork); } NoPushableForkFound(forkMode, pullFork.Name); return(null); }
private void NoPushableForkFound(ForkMode forkMode, string name) { _logger.Error($"No pushable fork found for {name} in mode {forkMode}"); }
public ForkFinder(IGithub github, UserSettings settings, INuKeeperLogger logger) { _github = github; _forkMode = settings.ForkMode; _logger = logger; }