Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1445ac6

Browse files
never rely on global renv installation, execute all code in renv
1 parent c454fb6 commit 1445ac6

2 files changed

Lines changed: 38 additions & 23 deletions

File tree

pre_commit/languages/r.py

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,37 +23,53 @@
2323
get_default_version = lang_base.basic_get_default_version
2424

2525

26-
def _execute_vanilla_r_code_as_script(code: str, **kwargs: Any) -> str:
27-
with _r_code_in_tempfile(code) as f:
28-
cmd_out = cmd_output_b(_rscript_exec(), '--vanilla', f, **kwargs)
29-
return cmd_out[1].decode().rstrip('\n')
30-
31-
32-
def _read_installed_version(envdir: str) -> str:
26+
def _execute_vanilla_r_code_as_script(
27+
code: str, prefix: Prefix, version: str, args: Sequence[str] = (),
28+
**kwargs: Any,
29+
) -> str:
30+
with in_env(prefix, version):
31+
with _r_code_in_tempfile(code) as f:
32+
cmd_out = cmd_output_b(
33+
_rscript_exec(), *RSCRIPT_OPTS, f, *args, **kwargs,
34+
)
35+
return cmd_out[1].decode().rstrip('\n')
36+
37+
38+
def _read_installed_version(envdir: str, prefix: Prefix, version: str) -> str:
3339
return _execute_vanilla_r_code_as_script(
34-
'cat(renv::settings$r.version())', cwd=envdir,
40+
'cat(renv::settings$r.version())',
41+
prefix=prefix, version=version,
42+
cwd=envdir,
3543
)
3644

3745

38-
def _read_executable_version(envdir: str) -> str:
46+
def _read_executable_version(envdir: str, prefix: Prefix, version: str) -> str:
3947
return _execute_vanilla_r_code_as_script(
4048
'cat(as.character(getRversion()))',
49+
prefix=prefix, version=version,
4150
cwd=envdir,
4251
)
4352

4453

45-
def _write_current_r_version(envdir: str) -> None:
54+
def _write_current_r_version(
55+
envdir: str, prefix: Prefix, version: str,
56+
) -> None:
4657
_execute_vanilla_r_code_as_script(
4758
'renv::settings$r.version(as.character(getRversion()))',
59+
prefix=prefix, version=version,
4860
cwd=envdir,
4961
)
5062

5163

5264
def health_check(prefix: Prefix, version: str) -> str | None:
5365
envdir = lang_base.environment_dir(prefix, ENVIRONMENT_DIR, version)
5466

55-
r_version_installation = _read_installed_version(envdir=envdir)
56-
r_version_current_executable = _read_executable_version(envdir=envdir)
67+
r_version_installation = _read_installed_version(
68+
envdir=envdir, prefix=prefix, version=version,
69+
)
70+
r_version_current_executable = _read_executable_version(
71+
envdir=envdir, prefix=prefix, version=version,
72+
)
5773
if r_version_installation in {'NULL', ''}:
5874
return (
5975
'Hooks were installed with an unknown R version. R version for '
@@ -193,17 +209,14 @@ def install_environment(
193209
with _r_code_in_tempfile(r_code_inst_environment) as f:
194210
cmd_output_b(_rscript_exec(), '--vanilla', f, cwd=env_dir)
195211

196-
_write_current_r_version(envdir=env_dir)
212+
_write_current_r_version(envdir=env_dir, prefix=prefix, version=version)
197213
if additional_dependencies:
198214
r_code_inst_add = 'renv::install(commandArgs(trailingOnly = TRUE))'
199-
with in_env(prefix, version):
200-
with _r_code_in_tempfile(r_code_inst_add) as f:
201-
cmd_output_b(
202-
_rscript_exec(), *RSCRIPT_OPTS,
203-
f,
204-
*additional_dependencies,
205-
cwd=env_dir,
206-
)
215+
_execute_vanilla_r_code_as_script(
216+
code=r_code_inst_add, prefix=prefix, version=version,
217+
cwd=env_dir,
218+
args=additional_dependencies,
219+
)
207220

208221

209222
def _inline_r_setup(code: str) -> str:

tests/languages/r_test.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,8 @@ def installed_environment(
280280
@pytest.fixture
281281
def older_r_version():
282282
with mock.patch.object(
283-
r, '_read_installed_version', lambda envdir: '1.0.0',
283+
r, '_read_installed_version',
284+
lambda envdir, prefix, version: '1.0.0',
284285
):
285286
yield
286287

@@ -300,9 +301,10 @@ def test_health_check_after_downgrade(installed_environment, older_r_version):
300301

301302
@pytest.fixture(params=('NULL', 'NA', "''"))
302303
def installed_env_without_r_version_info(request, installed_environment):
303-
_, env_dir = installed_environment
304+
prefix, env_dir = installed_environment
304305
r._execute_vanilla_r_code_as_script(
305306
f'renv::settings$r.version({request.param})', cwd=env_dir,
307+
prefix=prefix, version=C.DEFAULT,
306308
)
307309
yield
308310

0 commit comments

Comments
 (0)