Move config directory

This changes the config directory from the `dirs::cache_dir` to `dirs::config_dir`. It does however keep the cache directory as the default logging directory, as it seems a better fit.

It also adds a function, `migrate_config`, which is called at startup to move directory entries inside the "old" config directory to the "new" one (but it skips moving log files). The intention is that this function can be removed after a few releases when the likelihood of someone upgrading from 0.6.0 or earlier is fairly small.

Fixes #98
This commit is contained in:
Jon Grythe Stødle 2020-06-15 00:09:02 +02:00 committed by Stephan Dilly
parent 602257f114
commit 212ce86f49
2 changed files with 39 additions and 4 deletions

View File

@ -4,7 +4,11 @@ default on light terminal:
![](assets/light-theme.png)
to change the colors of the program you have to modify `theme.ron` file
[Ron format](https://github.com/ron-rs/ron) located at config path (same as [log path](README.md#diagnostics)).
[Ron format](https://github.com/ron-rs/ron) located at config path. The path differs depending on the operating system:
* `$HOME/Library/Preferences/gitui/theme.ron` (mac)
* `$XDG_CONFIG_HOME/gitui/theme.ron` (linux using XDG)
* `$HOME/.config/gitui/theme.ron` (linux)
Valid colors can be found in [ColorDef](./src/ui/style.rs#ColorDef) struct. note that rgb colors might not be supported
in every terminal.
in every terminal.

View File

@ -66,6 +66,9 @@ fn main() -> Result<()> {
return Ok(());
}
// TODO: To be removed in a future version, when upgrading from 0.6.x or earlier is unlikely
migrate_config()?;
setup_terminal()?;
defer! {
shutdown_terminal().expect("shutdown failed");
@ -202,7 +205,26 @@ fn start_terminal<W: Write>(
Ok(terminal)
}
fn get_app_config_path() -> Result<PathBuf> {
fn migrate_config() -> Result<()> {
let cache_path: PathBuf = get_app_cache_path()?;
let entries = cache_path
.read_dir()?
.flat_map(|dir_entry| dir_entry)
.filter(|entry| {
!entry.file_name().to_string_lossy().ends_with(".log")
});
for entry in entries {
let mut config_path: PathBuf = get_app_config_path()?;
config_path.push(entry.file_name());
fs::rename(entry.path(), config_path)?;
}
Ok(())
}
fn get_app_cache_path() -> Result<PathBuf> {
let mut path = dirs::cache_dir()
.ok_or_else(|| anyhow!("failed to find os cache dir."))?;
@ -211,8 +233,17 @@ fn get_app_config_path() -> Result<PathBuf> {
Ok(path)
}
fn get_app_config_path() -> Result<PathBuf> {
let mut path = dirs::config_dir()
.ok_or_else(|| anyhow!("failed to find os config dir."))?;
path.push("gitui");
fs::create_dir_all(&path)?;
Ok(path)
}
fn setup_logging() -> Result<()> {
let mut path = get_app_config_path()?;
let mut path = get_app_cache_path()?;
path.push("gitui.log");
let _ = WriteLogger::init(