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}");
        }
Exemplo n.º 2
0
        public GitHubForkFinder(ICollaborationPlatform collaborationPlatform, INuKeeperLogger logger, ForkMode forkMode)
        {
            _collaborationPlatform = collaborationPlatform;
            _logger   = logger;
            _forkMode = forkMode;

            _logger.Detailed($"FindPushFork. Fork Mode is {_forkMode}");
        }
Exemplo n.º 3
0
        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}");
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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}");
            }
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
 private void NoPushableForkFound(ForkMode forkMode, string name)
 {
     _logger.Error($"No pushable fork found for {name} in mode {forkMode}");
 }
Exemplo n.º 10
0
 public ForkFinder(IGithub github, UserSettings settings, INuKeeperLogger logger)
 {
     _github   = github;
     _forkMode = settings.ForkMode;
     _logger   = logger;
 }