mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-17 08:14:42 +04:00
Adhere to XDG specification for cache dir.
This commit is contained in:
parent
ef8347cf2d
commit
0120af56a7
9 changed files with 50 additions and 17 deletions
|
|
@ -28,4 +28,4 @@ after_success: coveralls
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
- $HOME/.cache/pip
|
- $HOME/.cache/pip
|
||||||
- $HOME/.pre-commit
|
- $HOME/.cache/pre-commit
|
||||||
|
|
|
||||||
|
|
@ -23,4 +23,4 @@ test_script: tox
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
- '%LOCALAPPDATA%\pip\cache'
|
- '%LOCALAPPDATA%\pip\cache'
|
||||||
- '%USERPROFILE%\.pre-commit'
|
- '%USERPROFILE%\.cache\pre-commit'
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,9 @@ from pre_commit.util import rmtree
|
||||||
|
|
||||||
|
|
||||||
def clean(runner):
|
def clean(runner):
|
||||||
if os.path.exists(runner.store.directory):
|
legacy_path = os.path.expanduser('~/.pre-commit')
|
||||||
rmtree(runner.store.directory)
|
for directory in (runner.store.directory, legacy_path):
|
||||||
output.write_line('Cleaned {}.'.format(runner.store.directory))
|
if os.path.exists(directory):
|
||||||
|
rmtree(directory)
|
||||||
|
output.write_line('Cleaned {}.'.format(directory))
|
||||||
return 0
|
return 0
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,11 @@ def _log_and_exit(msg, exc, formatted):
|
||||||
_to_bytes(exc), b'\n',
|
_to_bytes(exc), b'\n',
|
||||||
))
|
))
|
||||||
output.write(error_msg)
|
output.write(error_msg)
|
||||||
output.write_line('Check the log at ~/.pre-commit/pre-commit.log')
|
|
||||||
store = Store()
|
store = Store()
|
||||||
store.require_created()
|
store.require_created()
|
||||||
with open(os.path.join(store.directory, 'pre-commit.log'), 'wb') as log:
|
log_path = os.path.join(store.directory, 'pre-commit.log')
|
||||||
|
output.write_line('Check the log at {}'.format(log_path))
|
||||||
|
with open(log_path, 'wb') as log:
|
||||||
output.write(error_msg, stream=log)
|
output.write(error_msg, stream=log)
|
||||||
output.write_line(formatted, stream=log)
|
output.write_line(formatted, stream=log)
|
||||||
raise SystemExit(1)
|
raise SystemExit(1)
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,9 @@ def _get_default_directory():
|
||||||
`Store.get_default_directory` can be mocked in tests and
|
`Store.get_default_directory` can be mocked in tests and
|
||||||
`_get_default_directory` can be tested.
|
`_get_default_directory` can be tested.
|
||||||
"""
|
"""
|
||||||
return os.environ.get(
|
return os.environ.get('PRE_COMMIT_HOME') or os.path.join(
|
||||||
'PRE_COMMIT_HOME',
|
os.environ.get('XDG_CACHE_HOME') or os.path.expanduser('~/.cache'),
|
||||||
os.path.join(os.path.expanduser('~'), '.pre-commit'),
|
'pre-commit',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,18 +2,35 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
|
import mock
|
||||||
|
import pytest
|
||||||
|
|
||||||
from pre_commit.commands.clean import clean
|
from pre_commit.commands.clean import clean
|
||||||
from pre_commit.util import rmtree
|
from pre_commit.util import rmtree
|
||||||
|
|
||||||
|
|
||||||
def test_clean(runner_with_mocked_store):
|
@pytest.fixture(autouse=True)
|
||||||
|
def fake_old_dir(tempdir_factory):
|
||||||
|
fake_old_dir = tempdir_factory.get()
|
||||||
|
|
||||||
|
def _expanduser(path, *args, **kwargs):
|
||||||
|
assert path == '~/.pre-commit'
|
||||||
|
return fake_old_dir
|
||||||
|
|
||||||
|
with mock.patch.object(os.path, 'expanduser', side_effect=_expanduser):
|
||||||
|
yield fake_old_dir
|
||||||
|
|
||||||
|
|
||||||
|
def test_clean(runner_with_mocked_store, fake_old_dir):
|
||||||
|
assert os.path.exists(fake_old_dir)
|
||||||
assert os.path.exists(runner_with_mocked_store.store.directory)
|
assert os.path.exists(runner_with_mocked_store.store.directory)
|
||||||
clean(runner_with_mocked_store)
|
clean(runner_with_mocked_store)
|
||||||
|
assert not os.path.exists(fake_old_dir)
|
||||||
assert not os.path.exists(runner_with_mocked_store.store.directory)
|
assert not os.path.exists(runner_with_mocked_store.store.directory)
|
||||||
|
|
||||||
|
|
||||||
def test_clean_empty(runner_with_mocked_store):
|
def test_clean_empty(runner_with_mocked_store):
|
||||||
"""Make sure clean succeeds when we the directory doesn't exist."""
|
"""Make sure clean succeeds when the directory doesn't exist."""
|
||||||
rmtree(runner_with_mocked_store.store.directory)
|
rmtree(runner_with_mocked_store.store.directory)
|
||||||
assert not os.path.exists(runner_with_mocked_store.store.directory)
|
assert not os.path.exists(runner_with_mocked_store.store.directory)
|
||||||
clean(runner_with_mocked_store)
|
clean(runner_with_mocked_store)
|
||||||
|
|
|
||||||
|
|
@ -81,12 +81,12 @@ def test_log_and_exit(cap_out, mock_out_store_directory):
|
||||||
)
|
)
|
||||||
|
|
||||||
printed = cap_out.get()
|
printed = cap_out.get()
|
||||||
|
log_file = os.path.join(mock_out_store_directory, 'pre-commit.log')
|
||||||
assert printed == (
|
assert printed == (
|
||||||
'msg: FatalError: hai\n'
|
'msg: FatalError: hai\n'
|
||||||
'Check the log at ~/.pre-commit/pre-commit.log\n'
|
'Check the log at {}\n'.format(log_file)
|
||||||
)
|
)
|
||||||
|
|
||||||
log_file = os.path.join(mock_out_store_directory, 'pre-commit.log')
|
|
||||||
assert os.path.exists(log_file)
|
assert os.path.exists(log_file)
|
||||||
contents = io.open(log_file).read()
|
contents = io.open(log_file).read()
|
||||||
assert contents == (
|
assert contents == (
|
||||||
|
|
@ -102,6 +102,7 @@ def test_error_handler_non_ascii_exception(mock_out_store_directory):
|
||||||
|
|
||||||
|
|
||||||
def test_error_handler_no_tty(tempdir_factory):
|
def test_error_handler_no_tty(tempdir_factory):
|
||||||
|
pre_commit_home = tempdir_factory.get()
|
||||||
output = cmd_output_mocked_pre_commit_home(
|
output = cmd_output_mocked_pre_commit_home(
|
||||||
sys.executable, '-c',
|
sys.executable, '-c',
|
||||||
'from __future__ import unicode_literals\n'
|
'from __future__ import unicode_literals\n'
|
||||||
|
|
@ -110,8 +111,10 @@ def test_error_handler_no_tty(tempdir_factory):
|
||||||
' raise ValueError("\\u2603")\n',
|
' raise ValueError("\\u2603")\n',
|
||||||
retcode=1,
|
retcode=1,
|
||||||
tempdir_factory=tempdir_factory,
|
tempdir_factory=tempdir_factory,
|
||||||
|
pre_commit_home=pre_commit_home,
|
||||||
)
|
)
|
||||||
|
log_file = os.path.join(pre_commit_home, 'pre-commit.log')
|
||||||
assert output[1].replace('\r', '') == (
|
assert output[1].replace('\r', '') == (
|
||||||
'An unexpected error has occurred: ValueError: ☃\n'
|
'An unexpected error has occurred: ValueError: ☃\n'
|
||||||
'Check the log at ~/.pre-commit/pre-commit.log\n'
|
'Check the log at {}\n'.format(log_file)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ from __future__ import absolute_import
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import os.path
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
import pytest
|
import pytest
|
||||||
|
|
@ -121,10 +122,11 @@ def test_expected_fatal_error_no_git_repo(
|
||||||
with cwd(tempdir_factory.get()):
|
with cwd(tempdir_factory.get()):
|
||||||
with pytest.raises(SystemExit):
|
with pytest.raises(SystemExit):
|
||||||
main.main([])
|
main.main([])
|
||||||
|
log_file = os.path.join(mock_out_store_directory, 'pre-commit.log')
|
||||||
assert cap_out.get() == (
|
assert cap_out.get() == (
|
||||||
'An error has occurred: FatalError: git failed. '
|
'An error has occurred: FatalError: git failed. '
|
||||||
'Is it installed, and are you in a Git repository directory?\n'
|
'Is it installed, and are you in a Git repository directory?\n'
|
||||||
'Check the log at ~/.pre-commit/pre-commit.log\n'
|
'Check the log at {}\n'.format(log_file)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,15 @@ def test_our_session_fixture_works():
|
||||||
def test_get_default_directory_defaults_to_home():
|
def test_get_default_directory_defaults_to_home():
|
||||||
# Not we use the module level one which is not mocked
|
# Not we use the module level one which is not mocked
|
||||||
ret = _get_default_directory()
|
ret = _get_default_directory()
|
||||||
assert ret == os.path.join(os.path.expanduser('~'), '.pre-commit')
|
assert ret == os.path.join(os.path.expanduser('~/.cache'), 'pre-commit')
|
||||||
|
|
||||||
|
|
||||||
|
def test_adheres_to_xdg_specification():
|
||||||
|
with mock.patch.dict(
|
||||||
|
os.environ, {'XDG_CACHE_HOME': '/tmp/fakehome'},
|
||||||
|
):
|
||||||
|
ret = _get_default_directory()
|
||||||
|
assert ret == os.path.join('/tmp/fakehome', 'pre-commit')
|
||||||
|
|
||||||
|
|
||||||
def test_uses_environment_variable_when_present():
|
def test_uses_environment_variable_when_present():
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue