From 8e84bf04465eebf5b86e71357d811acafdefd1ce Mon Sep 17 00:00:00 2001 From: "Dustin J. Mitchell" Date: Sun, 13 Jun 2021 15:36:18 -0400 Subject: [PATCH 1/2] Create a new doc if necessary in `ta config set` --- cli/src/settings/settings.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/cli/src/settings/settings.rs b/cli/src/settings/settings.rs index 95d0e4d2e..440e6cb4a 100644 --- a/cli/src/settings/settings.rs +++ b/cli/src/settings/settings.rs @@ -184,10 +184,16 @@ impl Settings { .ok_or_else(|| anyhow!("Could not determine config file name"))? }; - let mut document = fs::read_to_string(filename.clone()) - .context("Could not read existing configuration file")? - .parse::() - .context("Could not parse existing configuration file")?; + let exists = filename.exists(); + + let mut document = if exists { + fs::read_to_string(filename.clone()) + .context("Could not read existing configuration file")? + .parse::() + .context("Could not parse existing configuration file")? + } else { + Document::new() + }; // set the value as the correct type match key { From cc5240eeec3c55a8d65091b73c109e0a794faf32 Mon Sep 17 00:00:00 2001 From: "Dustin J. Mitchell" Date: Sun, 13 Jun 2021 15:40:57 -0400 Subject: [PATCH 2/2] Create config directory if necessary --- cli/src/settings/settings.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cli/src/settings/settings.rs b/cli/src/settings/settings.rs index 440e6cb4a..83f8938ae 100644 --- a/cli/src/settings/settings.rs +++ b/cli/src/settings/settings.rs @@ -186,6 +186,14 @@ impl Settings { let exists = filename.exists(); + // try to create the parent directory if the file does not exist + if !exists { + if let Some(dir) = filename.parent() { + fs::create_dir_all(dir)?; + } + } + + // start with the existing document, or a blank document let mut document = if exists { fs::read_to_string(filename.clone()) .context("Could not read existing configuration file")?