Exemplo n.º 1
0
def _vendor_requirements(requirements: List[_Requirement]) -> None:
    """
    Clone vendored requirements.
    """
    target_directories = set(requirement.target_directory
                             for requirement in requirements)

    for target_directory in target_directories:
        target_directory.mkdir(exist_ok=True)
        init_file = Path(target_directory) / '__init__.py'
        Path(init_file).touch()

    for requirement in requirements:
        uri = 'git+{https_address}@{reference}'.format(
            https_address=requirement.https_address,
            reference=requirement.git_reference,
        )

        subprocess.check_call([
            'pip',
            'install',
            '--no-dependencies',
            '--no-binary',
            ':all:',
            '--target',
            str(requirement.target_directory),
            uri,
        ], )

    for target_directory in target_directories:
        # Ideally we would not use a protected function, however, this
        # trade-off has been considered - we want to use the vendored
        # ``dcos_test_utils`` from the vendored ``dcos_launch``.
        package_names = [
            requirement.package_name for requirement in requirements
            if requirement.target_directory == target_directory
        ]
        vendorize._rewrite_imports(  # pylint: disable=protected-access
            target_directory=target_directory,
            top_level_names=package_names,
        )
def main() -> None:
    """
    We vendor some requirements.

    We use our own script as we want the vendored ``dcos_launch`` to use the
    vendored ``dcos_test_utils``.
    """
    dcos_e2e_target_directory = Path('src/dcos_e2e/_vendor')
    dcos_cli_target_directory = Path('src/cli/_vendor')

    dcos_launch = _Requirement(
        target_directory=dcos_e2e_target_directory,
        package_name='dcos_launch',
        https_address='https://github.com/dcos/dcos-launch',
        git_reference='2442b5246684c0663162e51136b2fe7a5c7ef3e1',
    )

    test_utils = _Requirement(
        target_directory=dcos_e2e_target_directory,
        package_name='dcos_test_utils',
        https_address='https://github.com/dcos/dcos-test-utils',
        git_reference='5361c8623cd0751f9312cf79b66dde6f09da1e74',
    )

    # We have a fix at https://github.com/click-contrib/sphinx-click/pull/27
    # that we require.
    sphinx_click = _Requirement(
        target_directory=dcos_e2e_target_directory,
        package_name='sphinx_click',
        https_address='https://github.com/adamtheturtle/sphinx-click',
        git_reference='fix-envvar-duplicates',
    )

    vertigo_e2e = _Requirement(
        target_directory=dcos_e2e_target_directory,
        package_name='vertigo',
        https_address='https://github.com/adamtheturtle/vertigo',
        git_reference='77d7aa5d994e2650ece9e8aded6e9bffda21a2ac',
    )

    vertigo_cli = _Requirement(
        target_directory=dcos_cli_target_directory,
        package_name='vertigo',
        https_address='https://github.com/adamtheturtle/vertigo',
        git_reference='77d7aa5d994e2650ece9e8aded6e9bffda21a2ac',
    )

    requirements = [
        dcos_launch,
        test_utils,
        sphinx_click,
        vertigo_e2e,
        vertigo_cli,
    ]
    target_directories = set(requirement.target_directory
                             for requirement in requirements)

    for target_directory in target_directories:
        try:
            target_directory.mkdir(exist_ok=False)
        except FileExistsError:
            message = (
                'Error: {target_directory} exists. '
                'Run the following commands before running this script again:'
                '\n\n'
                'git rm -rf {target_directory}\n'
                'rm -rf {target_directory}')

            print(message.format(target_directory=target_directory))
            sys.exit(1)

        init_file = Path(target_directory) / '__init__.py'
        Path(init_file).touch()

    for requirement in requirements:
        uri = 'git+{https_address}@{reference}'.format(
            https_address=requirement.https_address,
            reference=requirement.git_reference,
        )

        subprocess.check_call([
            'pip',
            'install',
            '--no-dependencies',
            '--target',
            str(requirement.target_directory),
            uri,
        ], )

    for target_directory in target_directories:
        # Ideally we would not use a protected function, however, this
        # trade-off has been considered - we want to use the vendored
        # ``dcos_test_utils`` from the vendored ``dcos_launch``.
        package_names = [
            requirement.package_name for requirement in requirements
            if requirement.target_directory == target_directory
        ]
        vendorize._rewrite_imports(  # pylint: disable=protected-access
            target_directory=target_directory,
            top_level_names=package_names,
        )
def main() -> None:
    """
    We vendor some requirements.

    We use our own script as we want the vendored ``dcos_launch`` to use the
    vendored ``dcos_test_utils``.
    """
    vendored_launch_sha = 'b8110fad0afa08ecfd8e06630e44799eb136eba4'
    vendored_test_utils_sha = '00f1a62ef673ebc34e29d9db488dd06b0c1ae4ec'

    launch = 'git+https://github.com/dcos/dcos-launch@{sha}'.format(
        sha=vendored_launch_sha,
    )

    test_utils = 'git+https://github.com/dcos/dcos-test-utils@{sha}'.format(
        sha=vendored_test_utils_sha,
    )

    # We have a fix at https://github.com/click-contrib/sphinx-click/pull/27
    # that we require.
    sphinx_click = (
        'git+https://github.com/adamtheturtle/sphinx-click@'
        'fix-envvar-duplicates'
    )

    package_name_to_uri = {
        'dcos_launch': launch,
        'dcos_test_utils': test_utils,
        'sphinx_click': sphinx_click,
    }

    target_directory = Path('src/dcos_e2e/_vendor')
    try:
        target_directory.mkdir(exist_ok=False)
    except FileExistsError:
        message = (
            'Error: {target_directory} exists. '
            'Run the following commands before running this script again:'
            '\n\n'
            'git rm -rf {target_directory}\n'
            'rm -rf src/dcos_e2e/_vendor'
        )

        print(message.format(target_directory=target_directory))
        sys.exit(1)

    init_file = Path(target_directory) / '__init__.py'
    Path(init_file).touch()

    for _, requirement in package_name_to_uri.items():
        subprocess.check_call(
            [
                'pip',
                'install',
                '--no-dependencies',
                '--target',
                str(target_directory),
                requirement,
            ],
        )

    # Ideally we would not use a protected function, however, this trade-off
    # has been considered - we want to use the vendored ``dcos_test_utils``
    # from the vendored ``dcos_launch``.
    vendorize._rewrite_imports(  # pylint: disable=protected-access
        target_directory=target_directory,
        top_level_names=list(package_name_to_uri.keys()),
    )