def get_branches(service):
    paasta_branches = set(get_branches_for_service(SOA_DIR, service))
    remote_refs = remote_git.list_remote_refs(utils.get_git_url(service))

    for branch in paasta_branches:
        if 'refs/heads/%s' % branch in remote_refs:
            yield branch
def get_branches(service):
    paasta_branches = set(get_branches_for_service(SOA_DIR, service))
    remote_refs = remote_git.list_remote_refs(utils.get_git_url(service))

    for branch in paasta_branches:
        if 'refs/heads/%s' % branch in remote_refs:
            yield branch
def test_get_branches_for_service():
    fake_dir = '/mail/var/tea'
    fake_srv = 'boba'
    fake_branches = ['red', 'green', 'blue', 'orange', 'white', 'black']
    expected = set([
        'red', 'green', 'blue', 'orange', 'white', 'black',
        'cluster_a.chronos_job', 'cluster_b.chronos_job',
        'cluster_c.chronos_job'
    ])
    with contextlib.nested(
            mock.patch(
                'paasta_tools.generate_deployments_for_service.list_clusters',
                return_value=['cluster_a', 'cluster_b', 'cluster_c']),
            mock.patch(
                'paasta_tools.generate_deployments_for_service.get_service_instance_list',
                side_effect=lambda service, cluster, instance_type: [(
                    '', 'main_example'), ('', 'canary_example')]
                if instance_type == 'marathon' else [('', 'chronos_job')]),
            mock.patch(
                'paasta_tools.generate_deployments_for_service.load_marathon_service_config',
                side_effect=lambda service, instance, cluster, soa_dir:
                MarathonServiceConfig(
                    service=service,
                    cluster=cluster,
                    instance=instance,
                    config_dict={'deploy_group': fake_branches.pop()},
                    branch_dict={},
                )),
            mock.patch(
                'paasta_tools.generate_deployments_for_service.load_chronos_job_config',
                side_effect=lambda service, instance, cluster, soa_dir:
                ChronosJobConfig(
                    service=service,
                    cluster=cluster,
                    instance=instance,
                    config_dict={},
                    branch_dict={},
                )),
    ) as (
            list_clusters_patch,
            get_service_instance_list_patch,
            load_marathon_config_patch,
            load_chronos_config_patch,
    ):
        actual = generate_deployments_for_service.get_branches_for_service(
            fake_dir, fake_srv)
        assert expected == actual
        # three clusters each having a canary and main marathon instance equals six instances total
        assert load_marathon_config_patch.call_count == 6
        # three clusters each having one chronos job equals six instances total
        assert load_chronos_config_patch.call_count == 3