refactor(link): add LinkError and propagate errors up to runner #14

Merged
cafkafk merged 6 commits from cafk-link-result-refactor into main 2023-10-17 07:09:30 +02:00
Showing only changes of commit 7b88057b3f - Show all commits

View file

@ -176,32 +176,19 @@ fn handle_file_exists(selff: &Link, tx_path: &Path, rx_path: &Path) -> Result<bo
if file.canonicalize().expect("failed to canonicalize file")
== tx_path.canonicalize().expect("failed to canonicalize path") =>
{
debug!(
"Linking {} -> {} failed: file already linked",
&selff.tx, &selff.rx
);
Err(LinkError::AlreadyLinked(
tx_path.to_string_lossy().to_string(),
rx_path.to_string_lossy().to_string(),
))
}
Ok(file) => {
error!(
"Linking {} -> {} failed: link to different file exists",
&selff.tx, &selff.rx
);
Err(LinkError::DifferentLink(
Ok(file) => Err(LinkError::DifferentLink(
tx_path.to_string_lossy().to_string(),
rx_path.to_string_lossy().to_string(),
))
}
Err(error) => {
error!("Linking {} -> {} failed: file exists", &selff.tx, &selff.rx);
Err(LinkError::FileExists(
)),
Err(error) => Err(LinkError::FileExists(
tx_path.to_string_lossy().to_string(),
rx_path.to_string_lossy().to_string(),
))
}
)),
}
}
@ -213,27 +200,18 @@ impl Link {
match rx_path.try_exists() {
// TODO: unwrap defeats the purpose here.
Ok(true) => handle_file_exists(self, tx_path, rx_path),
Ok(false) if rx_path.is_symlink() => {
error!(
"Linking {} -> {} failed: broken symlink",
&self.tx, &self.rx
);
Err(LinkError::FileExists(
Ok(false) if rx_path.is_symlink() => Err(LinkError::FileExists(
tx_path.to_string_lossy().to_string(),
rx_path.to_string_lossy().to_string(),
))
}
)),
Ok(false) => {
symlink(&self.tx, &self.rx)?;
Ok(true)
}
Err(error) => {
error!("Linking {} -> {} failed: {}", &self.tx, &self.rx, error);
Err(LinkError::FailedCreatingLink(
Err(error) => Err(LinkError::FailedCreatingLink(
tx_path.to_string_lossy().to_string(),
rx_path.to_string_lossy().to_string(),
))
}
)),
}
}
}