refactor: move config building out of main execution loop

Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
Kasper Juul Hermansen 2023-08-01 15:36:24 +02:00
parent c7793f7422
commit 39db4b8d1c
Signed by: kjuulh
GPG Key ID: 9AA7BC13CE474394

View File

@ -83,22 +83,7 @@ impl Command {
} }
pub fn execute(self, current_dir: Option<&Path>) -> anyhow::Result<()> { pub fn execute(self, current_dir: Option<&Path>) -> anyhow::Result<()> {
// 0. Get config let config = self.build_config(current_dir)?;
let mut builder = &mut PleaseConfigBuilder::new();
if self.global.config_stdin {
if let Some(stdin_fn) = self.stdin.clone() {
let output = (stdin_fn.lock().unwrap().deref())();
builder = builder.with_stdin(output?);
}
}
// 1. Parse the current directory
let current_dir = get_current_path(current_dir, self.config.source.clone())?;
let config = builder
.with_config_file(&current_dir)
.with_execution_env(std::env::vars())
.with_cli(self.config.clone())
.build()?;
match &self.commands { match &self.commands {
Some(Commands::Release {}) => { Some(Commands::Release {}) => {
@ -317,6 +302,26 @@ impl Command {
Ok(()) Ok(())
} }
fn build_config(
&self,
current_dir: Option<&Path>,
) -> Result<cuddle_please_frontend::PleaseConfig, anyhow::Error> {
let mut builder = &mut PleaseConfigBuilder::new();
if self.global.config_stdin {
if let Some(stdin_fn) = self.stdin.clone() {
let output = (stdin_fn.lock().unwrap().deref())();
builder = builder.with_stdin(output?);
}
}
let current_dir = get_current_path(current_dir, self.config.source.clone())?;
let config = builder
.with_config_file(&current_dir)
.with_execution_env(std::env::vars())
.with_cli(self.config.clone())
.build()?;
Ok(config)
}
fn get_git(&self, current_dir: &Path) -> anyhow::Result<VcsClient> { fn get_git(&self, current_dir: &Path) -> anyhow::Result<VcsClient> {
VcsClient::new_git(current_dir) VcsClient::new_git(current_dir)
} }