static async Task Main(string[] args)
        {
            ParameterStore parameterStore = new ParameterStore();

            if (await parameterStore.InitializeAsync(args))
            {
                ISynchronizer Synchronizer = new DefaultSynchronizer(_logger, await parameterStore.QueryParameterAsync <UriParameter>(), await parameterStore.QueryParameterAsync <OautTokenParameter>());

                OrganizationNameParameter sourceOrganizationNameParameter = await parameterStore.QueryParameterAsync <SourceOrganizationNameParameter>();

                OrganizationNameParameter targetOrganizationParameter = await parameterStore.QueryParameterAsync <TargetOrganizationNameParameter>() ?? sourceOrganizationNameParameter;

                SourceRepositoryNameParameter sourceRepositoryNameParameter = await parameterStore.QueryParameterAsync <SourceRepositoryNameParameter>();

                TargetRepositoryNameParameter targetRepositoryNameParameter = await parameterStore.QueryParameterAsync <TargetRepositoryNameParameter>();

                StrictFlagParameter strictFlagParameter = await parameterStore.QueryParameterAsync <StrictFlagParameter>();

                if (targetRepositoryNameParameter == null)
                {
                    await Synchronizer.SynchronizeAsync(sourceOrganizationNameParameter, sourceRepositoryNameParameter, targetOrganizationParameter, strictFlagParameter);
                }
                else
                {
                    await Synchronizer.SynchronizeAsync(sourceOrganizationNameParameter, await parameterStore.QueryParameterAsync <SourceRepositoryNameParameter>(), targetOrganizationParameter, targetRepositoryNameParameter, strictFlagParameter);
                }
            }
            else
            {
                await WriteHelpAsync();
            }

            Console.ReadKey();
        }
        public override async Task SynchronizeAsync(OrganizationNameParameter sourceOrganizationNameParameter,
                                                    RepositoryNameParameter repositoryNameParameter,
                                                    OrganizationNameParameter targetOrganizationNameParameter,
                                                    StrictFlagParameter strictFlagParameter)
        {
            Repository sourceRepository = await GitHubClient.Repository.Get(sourceOrganizationNameParameter.Value, repositoryNameParameter.Value);

            Organization organization = await GitHubClient.Organization
                                        .Get(targetOrganizationNameParameter.Value);

            IReadOnlyList <Repository> repositories = await GetRepositoriesAsync(sourceRepository, organization);

            await SynchronizeRepositoriesLabels(strictFlagParameter, sourceRepository, repositories);
        }
        public override async Task SynchronizeAsync(OrganizationNameParameter sourceOrganizationLoginNameParameter,
                                                    RepositoryNameParameter sourceRepositoryNameParameter,
                                                    OrganizationNameParameter targetOrganizationLoginNameParameter,
                                                    RepositoryNameParameter targetRepositoryNameParameter,
                                                    StrictFlagParameter strictFlagParameter)
        {
            if (string.Equals(sourceRepositoryNameParameter.Value, targetRepositoryNameParameter.Value))
            {
                WriteLog($"Synchronization stopped. Repo '{sourceRepositoryNameParameter.Value}' and '{targetRepositoryNameParameter.Value}' have to be different", ConsoleColor.Red);
                return;
            }

            Repository sourceRepository = await GitHubClient.Repository.Get(sourceOrganizationLoginNameParameter.Value, sourceRepositoryNameParameter.Value);

            Repository targetRepository = await GitHubClient.Repository.Get(targetOrganizationLoginNameParameter.Value, targetRepositoryNameParameter.Value);

            await SynchronizeRepositoriesLabels(strictFlagParameter, sourceRepository, new[] { targetRepository });
        }
        private async Task SynchronizeRepositoriesLabels(StrictFlagParameter strictFlagParameter, Repository sourceRepository, IEnumerable <Repository> targetRepositories)
        {
            IReadOnlyList <Label> sourceRepositoryLabels = await GetRepositoryLabelsAsync(sourceRepository);

            if (sourceRepositoryLabels.Any())
            {
                foreach (Repository targetRepository in targetRepositories)
                {
                    List <Label> targetRepositoryLabels = (await GetRepositoryLabelsAsync(targetRepository)).ToList();

                    foreach (Label labelItem in sourceRepositoryLabels)
                    {
                        Label existingLabel = targetRepositoryLabels.SingleOrDefault(label => label.Name == labelItem.Name);
                        if (existingLabel != null)
                        {
                            targetRepositoryLabels.Remove(existingLabel);
                            await UpdateLabelAsync(targetRepository, labelItem);

                            continue;
                        }

                        await CreateNewLabelAsync(targetRepository, labelItem);
                    }

                    if (strictFlagParameter != null && strictFlagParameter.Value && targetRepositoryLabels.Any())
                    {
                        foreach (var label in targetRepositoryLabels)
                        {
                            await DeleteLabel(targetRepository, label);
                        }
                    }

                    WriteLog($"Synchronization of labels from source repo: '{sourceRepository.Id} - {sourceRepository.Name}'", ConsoleColor.DarkYellow);
                }
            }
        }
Exemple #5
0
 public abstract Task SynchronizeAsync(OrganizationNameParameter sourceOrganizationLoginNameParameter, RepositoryNameParameter sourceRepositoryNameParameter, OrganizationNameParameter targetOrganizationLoginNameParameter, RepositoryNameParameter targetRepositoryNameParameter, StrictFlagParameter strictFlagParameter);