Commit f5597f66 authored by Léo-Paul Géneau's avatar Léo-Paul Géneau 👾 Committed by Julien Muchembled

Fix undefined rubygems version

Traceback (most recent call last):
  ...
    recipe.install()
  File "rubygemsrecipe/rubygems.py", line 347, in install
    gem_executable):
  File "rubygemsrecipe/rubygems.py", line 300, in get_dependency_list
    if self.version[0] < '3':
TypeError: 'NoneType' object has no attribute '__getitem__'

The test that was added in 60b10788 is adapted due to the call to subprocess.checkout .

See merge request !7
parent 60b10788
Pipeline #17306 running with stage
in 0 seconds
...@@ -293,6 +293,11 @@ class Recipe(object): ...@@ -293,6 +293,11 @@ class Recipe(object):
gem_executable = glob.glob(gem_executable + '*') gem_executable = glob.glob(gem_executable + '*')
if gem_executable: if gem_executable:
if not self.version:
self.version = self.run([
gem_executable[0],
'--version',
])
return gem_executable[0] return gem_executable[0]
def get_dependency_list(self, gem_dict, gem_executable): def get_dependency_list(self, gem_dict, gem_executable):
......
...@@ -17,6 +17,8 @@ import zc.buildout ...@@ -17,6 +17,8 @@ import zc.buildout
import rubygems import rubygems
RUBYGEMS_DEFAULT_VERSION = '2.0.0'
def touch(path): def touch(path):
with path.open('w') as f: with path.open('w') as f:
...@@ -24,7 +26,7 @@ def touch(path): ...@@ -24,7 +26,7 @@ def touch(path):
class fixture(object): class fixture(object):
def __init__(self, options=None, version='2.0.0'): def __init__(self, options=None, version=RUBYGEMS_DEFAULT_VERSION):
self.options = options or {} self.options = options or {}
self.version = version self.version = version
...@@ -61,7 +63,9 @@ class fixture(object): ...@@ -61,7 +63,9 @@ class fixture(object):
('download', 'rubygems.Download'), ('download', 'rubygems.Download'),
)) ))
self.patches['urlopen'].return_value = BytesIO( self.patches['urlopen'].return_value = BytesIO(
b'https://rubygems.org/rubygems/rubygems-2.0.0.zip' bytes(('https://rubygems.org/rubygems/rubygems-%s.zip'
% RUBYGEMS_DEFAULT_VERSION
).encode('utf-8'))
) )
self.makedirs(( self.makedirs((
...@@ -108,8 +112,9 @@ class RubyGemsTestCase(unittest.TestCase): ...@@ -108,8 +112,9 @@ class RubyGemsTestCase(unittest.TestCase):
args = patches['download'].mock_calls[0][1] args = patches['download'].mock_calls[0][1]
self.assertEqual(args[2], { self.assertEqual(args[2], {
'url': 'https://rubygems.org/rubygems/rubygems-2.0.0.zip', 'url': 'https://rubygems.org/rubygems/rubygems-%s.zip'
'destination': str(path / 'rubygems-2.0.0'), % RUBYGEMS_DEFAULT_VERSION,
'destination': str(path / ('rubygems-' + RUBYGEMS_DEFAULT_VERSION)),
}) })
expected_install_arg_list_list.insert(0, [ expected_install_arg_list_list.insert(0, [
...@@ -193,13 +198,14 @@ class RubyGemsDefaultTestCase(RubyGemsTestCase): ...@@ -193,13 +198,14 @@ class RubyGemsDefaultTestCase(RubyGemsTestCase):
@fixture({'recipe': { @fixture({'recipe': {
'gems': 'sass', 'gems': 'sass',
'url': 'https://rubygems.org/rubygems/rubygems-2.0.0.zip', 'url': 'https://rubygems.org/rubygems/rubygems-%s.zip'
% RUBYGEMS_DEFAULT_VERSION,
}}) }})
def test_version_from_url(self, path, patches, buildout, name, options, version): def test_version_from_url(self, path, patches, buildout, name, options, version):
recipe = rubygems.Recipe(buildout, name, options) recipe = rubygems.Recipe(buildout, name, options)
recipe.install() recipe.install()
@fixture({'recipe': {'gems': 'sass'}, 'version': '2.0.0'}) @fixture({'recipe': {'gems': 'sass'}, 'version': RUBYGEMS_DEFAULT_VERSION})
def test_version(self, path, patches, buildout, name, options, version): def test_version(self, path, patches, buildout, name, options, version):
recipe = rubygems.Recipe(buildout, name, options) recipe = rubygems.Recipe(buildout, name, options)
recipe.install() recipe.install()
...@@ -236,7 +242,7 @@ class RubyGemsDefaultTestCase(RubyGemsTestCase): ...@@ -236,7 +242,7 @@ class RubyGemsDefaultTestCase(RubyGemsTestCase):
touch(path / 'rubygems/bin/gem') touch(path / 'rubygems/bin/gem')
recipe.install() recipe.install()
args = patches['check_output'].mock_calls[0][1] args = patches['check_output'].mock_calls[1][1]
for arg in args[0]: for arg in args[0]:
matched = re.search('^--version.*$', arg) matched = re.search('^--version.*$', arg)
if matched: if matched:
...@@ -303,9 +309,13 @@ class RubyGemsDeploymentTestCase(RubyGemsTestCase): ...@@ -303,9 +309,13 @@ class RubyGemsDeploymentTestCase(RubyGemsTestCase):
path, patches, expected_install_arg_list_list) path, patches, expected_install_arg_list_list)
@deployment_fixture({'recipe': {'gems': 'hashie==0.3.1'}}) @deployment_fixture({'recipe': {'gems': 'hashie==0.3.1'}})
@mock.patch('rubygems.Recipe.get_gem_executable')
def test_already_installed_rubygems( def test_already_installed_rubygems(
self, path, patches, buildout, name, options, version): self, path, patches, buildout, name, options, version, get_gem_exe):
touch(path / 'rubygems/bin/gem') touch(path / 'rubygems/bin/gem')
def mocked_get_gem_exe(_):
self.version = RUBYGEMS_DEFAULT_VERSION
get_gem_exe.side_effect = mocked_get_gem_exe
self.deployment_install_test( self.deployment_install_test(
buildout, name, path, patches, options, version) buildout, name, path, patches, options, version)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment