diff --git a/gitup/config.py b/gitup/config.py index c0ed7ee..59f3c68 100644 --- a/gitup/config.py +++ b/gitup/config.py @@ -18,13 +18,28 @@ RED = Fore.RED + Style.BRIGHT INDENT1 = " " * 3 +def _ensure_dirs(path): + """Ensure the directories within the given pathname exist.""" + dirname = os.path.dirname(path) + if not os.path.exists(dirname): # Race condition, meh... + os.makedirs(dirname) + def _get_config_path(): """Return the path to the configuration file.""" xdg_cfg = os.environ.get("XDG_CONFIG_HOME") or os.path.join("~", ".config") return os.path.join(os.path.expanduser(xdg_cfg), "gitup", "config.ini") +def _migrate_old_config_path(): + """Migrate the old config location (~/.gitup) to the new one.""" + old_path = os.path.expanduser(os.path.join("~", ".gitup")) + if os.path.exists(old_path): + new_path = _get_config_path() + _ensure_dirs(new_path) + os.rename(old_path, new_path) + def _load_config_file(): """Read the config file and return a SafeConfigParser() object.""" + _migrate_old_config_path() config = configparser.SafeConfigParser() # Don't lowercase option names, because we are storing paths there: config.optionxform = str @@ -33,10 +48,9 @@ def _load_config_file(): def _save_config_file(config): """Save config changes to the config file returned by _get_config_path.""" + _migrate_old_config_path() cfg_path = _get_config_path() - if not os.path.exists(os.path.dirname(cfg_path)): # Race condition, meh... - os.makedirs(os.path.dirname(cfg_path)) - + _ensure_dirs(cfg_path) with open(cfg_path, "wb") as config_file: config.write(config_file)