From 07664a80cacf3ce527c33d9dfc6cd78c2f26b79a Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sat, 7 Jun 2014 14:25:44 -0700 Subject: [PATCH] Attempt ruby-download before ruby-build. --- pre_commit/languages/ruby.py | 17 ++++++++++++++++- .../.gitignore | 0 .../bin/ruby_hook | 0 .../hooks.yaml | 2 +- .../ruby_hook.gemspec | 0 tests/conftest.py | 8 ++++---- tests/repository_test.py | 6 +++--- 7 files changed, 24 insertions(+), 9 deletions(-) rename testing/resources/{ruby_1_9_3_p547_hooks_repo => ruby_1_9_3_hooks_repo}/.gitignore (100%) rename testing/resources/{ruby_1_9_3_p547_hooks_repo => ruby_1_9_3_hooks_repo}/bin/ruby_hook (100%) rename testing/resources/{ruby_1_9_3_p547_hooks_repo => ruby_1_9_3_hooks_repo}/hooks.yaml (74%) rename testing/resources/{ruby_1_9_3_p547_hooks_repo => ruby_1_9_3_hooks_repo}/ruby_hook.gemspec (100%) diff --git a/pre_commit/languages/ruby.py b/pre_commit/languages/ruby.py index 8e2e7fd1..b4a3be06 100644 --- a/pre_commit/languages/ruby.py +++ b/pre_commit/languages/ruby.py @@ -4,6 +4,7 @@ import contextlib import io from pre_commit.languages import helpers +from pre_commit.prefixed_command_runner import CalledProcessError from pre_commit.util import clean_path_on_failure @@ -28,6 +29,12 @@ def _install_rbenv(repo_cmd_runner, version='default'): # Only install ruby-build if the version is specified if version != 'default': + # ruby-download + repo_cmd_runner.run([ + 'git', 'clone', 'git://github.com/garnieretienne/rvm-download', + '{prefix}rbenv/plugins/ruby-download', + ]) + # ruby-build repo_cmd_runner.run([ 'git', 'clone', 'git://github.com/sstephenson/ruby-build', '{prefix}rbenv/plugins/ruby-build', @@ -57,6 +64,14 @@ def _install_rbenv(repo_cmd_runner, version='default'): activate_file.write('export RBENV_VERSION="{0}"\n'.format(version)) +def _install_ruby(environment, version): + try: + environment.run('rbenv download {0}'.format(version)) + except CalledProcessError: + # Failed to download from mirror for some reason, build it instead + environment.run('rbenv install {0}'.format(version)) + + def install_environment(repo_cmd_runner, version='default'): with clean_path_on_failure(repo_cmd_runner.path('rbenv')): # TODO: this currently will fail if there's no version specified and @@ -64,7 +79,7 @@ def install_environment(repo_cmd_runner, version='default'): _install_rbenv(repo_cmd_runner, version=version) with in_env(repo_cmd_runner) as ruby_env: if version != 'default': - ruby_env.run('rbenv install {0}'.format(version)) + _install_ruby(ruby_env, version) ruby_env.run( 'cd {prefix} && gem build *.gemspec && gem install *.gem', ) diff --git a/testing/resources/ruby_1_9_3_p547_hooks_repo/.gitignore b/testing/resources/ruby_1_9_3_hooks_repo/.gitignore similarity index 100% rename from testing/resources/ruby_1_9_3_p547_hooks_repo/.gitignore rename to testing/resources/ruby_1_9_3_hooks_repo/.gitignore diff --git a/testing/resources/ruby_1_9_3_p547_hooks_repo/bin/ruby_hook b/testing/resources/ruby_1_9_3_hooks_repo/bin/ruby_hook similarity index 100% rename from testing/resources/ruby_1_9_3_p547_hooks_repo/bin/ruby_hook rename to testing/resources/ruby_1_9_3_hooks_repo/bin/ruby_hook diff --git a/testing/resources/ruby_1_9_3_p547_hooks_repo/hooks.yaml b/testing/resources/ruby_1_9_3_hooks_repo/hooks.yaml similarity index 74% rename from testing/resources/ruby_1_9_3_p547_hooks_repo/hooks.yaml rename to testing/resources/ruby_1_9_3_hooks_repo/hooks.yaml index 9f06a970..8bcf4629 100644 --- a/testing/resources/ruby_1_9_3_p547_hooks_repo/hooks.yaml +++ b/testing/resources/ruby_1_9_3_hooks_repo/hooks.yaml @@ -2,5 +2,5 @@ name: Ruby Hook entry: ruby_hook language: ruby - language_version: 1.9.3-p547 + language_version: 1.9.3-p484 files: \.rb$ diff --git a/testing/resources/ruby_1_9_3_p547_hooks_repo/ruby_hook.gemspec b/testing/resources/ruby_1_9_3_hooks_repo/ruby_hook.gemspec similarity index 100% rename from testing/resources/ruby_1_9_3_p547_hooks_repo/ruby_hook.gemspec rename to testing/resources/ruby_1_9_3_hooks_repo/ruby_hook.gemspec diff --git a/tests/conftest.py b/tests/conftest.py index c70d4f6e..5d80c6ef 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -93,8 +93,8 @@ def ruby_hooks_repo(dummy_git_repo): @pytest.yield_fixture -def ruby_1_9_3_p547_hooks_repo(dummy_git_repo): - yield _make_repo(dummy_git_repo, 'ruby_1_9_3_p547_hooks_repo') +def ruby_1_9_3_hooks_repo(dummy_git_repo): + yield _make_repo(dummy_git_repo, 'ruby_1_9_3_hooks_repo') @pytest.yield_fixture @@ -149,8 +149,8 @@ def config_for_ruby_hooks_repo(ruby_hooks_repo): @pytest.yield_fixture -def config_for_ruby_1_9_3_p547_hooks_repo(ruby_1_9_3_p547_hooks_repo): - yield _make_config(ruby_1_9_3_p547_hooks_repo, 'ruby_hook') +def config_for_ruby_1_9_3_hooks_repo(ruby_1_9_3_hooks_repo): + yield _make_config(ruby_1_9_3_hooks_repo, 'ruby_hook') @pytest.yield_fixture diff --git a/tests/repository_test.py b/tests/repository_test.py index 8f0669b4..cd52f0b9 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -44,11 +44,11 @@ def test_run_versioned_node_hook(config_for_node_0_11_8_hooks_repo, store): @pytest.mark.herpderp @skipif_slowtests_false @pytest.mark.integration -def test_run_versioned_ruby_hook(config_for_ruby_1_9_3_p547_hooks_repo, store): - repo = Repository.create(config_for_ruby_1_9_3_p547_hooks_repo, store) +def test_run_versioned_ruby_hook(config_for_ruby_1_9_3_hooks_repo, store): + repo = Repository.create(config_for_ruby_1_9_3_hooks_repo, store) ret = repo.run_hook('ruby_hook', []) assert ret[0] == 0 - assert ret[1] == '1.9.3\n547\nHello world from a ruby hook\n' + assert ret[1] == '1.9.3\n484\nHello world from a ruby hook\n' @pytest.mark.integration