summaryrefslogtreecommitdiff
path: root/src/cmd/restore.rs
diff options
context:
space:
mode:
authorAlexander Batischev <eual.jp@gmail.com>2021-04-25 18:29:19 +0300
committerAlexander Batischev <eual.jp@gmail.com>2021-04-26 15:00:05 +0300
commit36c89315fad651b3b8ce1f8e25310db3ea668fae (patch)
tree64f15f87468b7eecf41b59b0fbf2f74369ce640b /src/cmd/restore.rs
parent80aaff3f70f790141fbc8caa8a2f4830cd5e3fee (diff)
downloadobnam2-36c89315fad651b3b8ce1f8e25310db3ea668fae.tar.gz
Expose fallibility of individual SQL results
`LocalGeneration::sql::files()` runs an SQL query, iterates over the results and collects the rows into a `Vec`. This can fail at any step: the query might fail to run, or one of the rows might fail to be fetched or processed. Right now, we lump all those failures into a `Result` that wraps the whole return value. This is only possible because we process each row before returning. Once `Vec` is replaced by an iterator, we won't have that luxury anymore, so we now wrap each individual element into its own `Result` (as well as wrapping the whole vector into a `Result` of its own).
Diffstat (limited to 'src/cmd/restore.rs')
-rw-r--r--src/cmd/restore.rs2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/cmd/restore.rs b/src/cmd/restore.rs
index a321e80..f8bbaf4 100644
--- a/src/cmd/restore.rs
+++ b/src/cmd/restore.rs
@@ -41,6 +41,7 @@ impl Restore {
info!("restoring {} files", gen.file_count()?);
let progress = create_progress_bar(gen.file_count()?, true);
for file in gen.files()? {
+ let file = file?;
match file.reason() {
Reason::FileError => (),
_ => restore_generation(
@@ -54,6 +55,7 @@ impl Restore {
}
}
for file in gen.files()? {
+ let file = file?;
if file.entry().is_dir() {
restore_directory_metadata(file.entry(), &self.to)?;
}