-
Notifications
You must be signed in to change notification settings - Fork 71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor restore command #741
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
//! `restore` example | ||
use rustic_core::{ | ||
LocalDestination, Repository, RepositoryOptions, RestoreOpts, TreeStreamerOptions, | ||
}; | ||
use simplelog::{Config, LevelFilter, SimpleLogger}; | ||
|
||
fn main() { | ||
// Display info logs | ||
let _ = SimpleLogger::init(LevelFilter::Info, Config::default()); | ||
|
||
// Open repository | ||
let repo_opts = RepositoryOptions { | ||
repository: Some("/tmp/repo".to_string()), | ||
password: Some("test".to_string()), | ||
..Default::default() | ||
}; | ||
|
||
let repo = Repository::new(&repo_opts) | ||
.unwrap() | ||
.open() | ||
.unwrap() | ||
.to_indexed() | ||
.unwrap(); | ||
|
||
// use latest snapshot without filtering snapshots | ||
let node = repo.node_from_snapshot_path("latest", |_| true).unwrap(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. These parameters could be a reasonable default. Like There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. IMO, it is actually vice versa: When you want the I think the use cases how to get to a certain node which you want to restore will vary a lot depending on the user interface you are using. If you have a CLI, the TL;DR: Yes, we need to think about the API, but here I wouldn't do so ;-) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. These notes are also meant as some future reference when we work on the API, by the way. Not really to change here, just so we are on the same boat (hence why I chose the For example, I would prefer both, There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Agree! 👍 |
||
|
||
// use list of the snapshot contents using no additional filtering | ||
let recursive = true; | ||
let streamer_opts = TreeStreamerOptions::default(); | ||
let ls = repo.ls(&node, &streamer_opts, recursive).unwrap(); | ||
|
||
let destination = "./restore/"; // restore to this destination dir | ||
let create = true; // create destination dir, if it doesn't exist | ||
let dest = LocalDestination::new(destination, create, !node.is_dir()).unwrap(); | ||
|
||
let opts = RestoreOpts::default(); | ||
let dry_run = false; | ||
// create restore infos. Note: this also already creates needed dirs in the destination | ||
let restore_infos = repo | ||
.prepare_restore(&opts, ls.clone(), &dest, dry_run) | ||
.unwrap(); | ||
Comment on lines
+28
to
+42
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this is overly verbose for the user-facing API. I think we should either replace all boolean values that are user-facing for these kinds of options with We could also use a |
||
|
||
repo.restore(restore_infos, &opts, ls, &dest).unwrap(); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,4 +7,5 @@ pub mod init; | |
pub mod key; | ||
pub mod prune; | ||
pub mod repoinfo; | ||
pub mod restore; | ||
pub mod snapshots; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe it's better to make it explicit?