diff --git a/thefuck/conf.py b/thefuck/conf.py index 54b2d370f..5097636cb 100644 --- a/thefuck/conf.py +++ b/thefuck/conf.py @@ -71,16 +71,20 @@ def _init_settings_file(self): for setting in DEFAULT_SETTINGS.items(): settings_file.write(u'# {} = {}\n'.format(*setting)) - def _setup_user_dir(self): - """Returns user config dir, create it when it doesn't exist.""" - + def _get_user_dir_path(self): # for backward compatibility, use `~/.thefuck` if it exists - user_dir = Path(os.path.expanduser('~/.thefuck')) + legacy_user_dir = Path(os.path.expanduser('~/.thefuck')) - if not user_dir.is_dir(): + if legacy_user_dir.is_dir(): + return legacy_user_dir + else: default_xdg_config_dir = os.path.expanduser("~/.config") xdg_config_dir = os.getenv("XDG_CONFIG_HOME", default_xdg_config_dir) - user_dir = Path(os.path.join(xdg_config_dir, 'thefuck')) + return Path(os.path.join(xdg_config_dir, 'thefuck')) + + def _setup_user_dir(self): + """Returns user config dir, create it when it doesn't exist.""" + user_dir = self._get_user_dir_path() rules_dir = user_dir.joinpath('rules') if not rules_dir.is_dir(): diff --git a/thefuck/utils.py b/thefuck/utils.py index fba72a3fe..51b9a1130 100644 --- a/thefuck/utils.py +++ b/thefuck/utils.py @@ -180,11 +180,7 @@ def _get_mtime(name): except OSError: return '0' - @decorator - def _cache(fn, *args, **kwargs): - if cache.disabled: - return fn(*args, **kwargs) - + def _get_cache_path(): default_xdg_cache_dir = os.path.expanduser("~/.cache") cache_dir = os.getenv("XDG_CACHE_HOME", default_xdg_cache_dir) cache_path = Path(cache_dir).joinpath('thefuck').as_posix() @@ -197,11 +193,19 @@ def _cache(fn, *args, **kwargs): if not os.path.isdir(cache_dir): raise + return cache_path + + @decorator + def _cache(fn, *args, **kwargs): + if cache.disabled: + return fn(*args, **kwargs) + # A bit obscure, but simplest way to generate unique key for # functions and methods in python 2 and 3: key = '{}.{}'.format(fn.__module__, repr(fn).split('at')[0]) etag = '.'.join(_get_mtime(name) for name in depends_on) + cache_path = _get_cache_path() with closing(shelve.open(cache_path)) as db: if db.get(key, {}).get('etag') == etag: