From 0bd3e85e082ae65a58ed2dc97d438d76b7867c38 Mon Sep 17 00:00:00 2001 From: Kyle Thrift Date: Sun, 21 Aug 2016 15:59:16 -0400 Subject: [PATCH 1/2] fix: new config dirs created in $HOME/.config/thefuck instead of $CWD fix: use correct path in warning message when XDG_CONFIG_HOME defined --- thefuck/conf.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/thefuck/conf.py b/thefuck/conf.py index cdcce2b6..9cfe10dc 100644 --- a/thefuck/conf.py +++ b/thefuck/conf.py @@ -40,16 +40,21 @@ class Settings(dict): settings_file.write(u'# {} = {}\n'.format(*setting)) def _get_user_dir_path(self): - # for backward compatibility, use `~/.thefuck` if it exists - legacy_user_dir = Path('~/.thefuck').expanduser() + """returns Path object representing the user config resource""" + xdg_config_home = os.getenv("XDG_CONFIG_HOME", "~/.config") + user_dir_modern = Path(xdg_config_home, 'thefuck').expanduser() + user_dir_legacy = Path('~', '.thefuck').expanduser() - if legacy_user_dir.is_dir(): - warn('~/.thefuck is deprecated, please move ' - 'config to ~/.config/thefuck') - return legacy_user_dir - else: - xdg_config_dir = os.getenv("XDG_CONFIG_HOME", "~/.config") - return Path(xdg_config_dir).joinpath('thefuck') + # default to standards-based location + user_dir = user_dir_modern + + # for backward compatibility use legacy '~/.thefuck' if it exists + if user_dir_legacy.is_dir(): + user_dir = user_dir_legacy + message = 'config path {} is deprecated. please move to {}' + warn(message.format(user_dir_legacy, user_dir_modern)) + + return user_dir def _setup_user_dir(self): """Returns user config dir, create it when it doesn't exist.""" From afd2ed4e51b789fb17446bed0bcc278a977f75f5 Mon Sep 17 00:00:00 2001 From: Vladimir Iakovlev Date: Mon, 22 Aug 2016 05:45:27 +0300 Subject: [PATCH 2/2] #540: Fix code style, add test --- tests/test_conf.py | 20 ++++++++++++++++++++ thefuck/conf.py | 25 +++++++++++-------------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/tests/test_conf.py b/tests/test_conf.py index b8ab5d9f..f496155c 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -1,5 +1,6 @@ import pytest import six +import os from mock import Mock from thefuck import const @@ -101,3 +102,22 @@ class TestInitializeSettingsFile(object): for setting in const.DEFAULT_SETTINGS.items(): assert '# {} = {}\n'.format(*setting) in settings_file_contents settings_file.close() + + +@pytest.mark.parametrize('legacy_dir_exists, xdg_config_home, result', [ + (False, '~/.config', '~/.config/thefuck'), + (False, '/user/test/config/', '/user/test/config/thefuck'), + (True, '~/.config', '~/.thefuck'), + (True, '/user/test/config/', '~/.thefuck')]) +def test_get_user_dir_path(mocker, environ, settings, legacy_dir_exists, + xdg_config_home, result): + mocker.patch('thefuck.conf.Path.is_dir', + return_value=legacy_dir_exists) + + if xdg_config_home is not None: + environ['XDG_CONFIG_HOME'] = xdg_config_home + else: + environ.pop('XDG_CONFIG_HOME', None) + + path = settings._get_user_dir_path().as_posix() + assert path == os.path.expanduser(result) diff --git a/thefuck/conf.py b/thefuck/conf.py index 9cfe10dc..7d25ce3c 100644 --- a/thefuck/conf.py +++ b/thefuck/conf.py @@ -40,21 +40,18 @@ class Settings(dict): settings_file.write(u'# {} = {}\n'.format(*setting)) def _get_user_dir_path(self): - """returns Path object representing the user config resource""" - xdg_config_home = os.getenv("XDG_CONFIG_HOME", "~/.config") - user_dir_modern = Path(xdg_config_home, 'thefuck').expanduser() - user_dir_legacy = Path('~', '.thefuck').expanduser() + """Returns Path object representing the user config resource""" + xdg_config_home = os.environ.get('XDG_CONFIG_HOME', '~/.config') + user_dir = Path(xdg_config_home, 'thefuck').expanduser() + legacy_user_dir = Path('~', '.thefuck').expanduser() - # default to standards-based location - user_dir = user_dir_modern - - # for backward compatibility use legacy '~/.thefuck' if it exists - if user_dir_legacy.is_dir(): - user_dir = user_dir_legacy - message = 'config path {} is deprecated. please move to {}' - warn(message.format(user_dir_legacy, user_dir_modern)) - - return user_dir + # For backward compatibility use legacy '~/.thefuck' if it exists: + if legacy_user_dir.is_dir(): + warn(u'Config path {} is deprecated. Please move to {}'.format( + legacy_user_dir, user_dir)) + return legacy_user_dir + else: + return user_dir def _setup_user_dir(self): """Returns user config dir, create it when it doesn't exist."""