fix: webdav/forget: correctly use application config (#1241)

The `inner_run` implementation used `self`
to read its config when it should use `RUSTIC_APP.config()`.

Some might say this is counterintuitive.
fixes #1163
also now correctly respects having `prune = true` in the config profile.

---------

Co-authored-by: Alexander Weiss <alex@weissfam.de>
Co-authored-by: simonsan <14062932+simonsan@users.noreply.github.com>
This commit is contained in:
nardoor 2024-09-18 16:42:18 +02:00 committed by GitHub
parent abf1835cbd
commit b865901a0c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 7 deletions

View File

@ -98,6 +98,9 @@ impl Runnable for ForgetCmd {
}
impl ForgetCmd {
/// be careful about self vs `RUSTIC_APP.config()` usage
/// only the `RUSTIC_APP.config()` involves the TOML and ENV merged configurations
/// see <https://github.com/rustic-rs/rustic/issues/1242>
fn inner_run(&self) -> Result<()> {
let config = RUSTIC_APP.config();
let repo = open_repository(&config.repository)?;
@ -155,7 +158,7 @@ impl ForgetCmd {
(_, _, true) => {}
}
if self.config.prune {
if config.forget.prune {
let mut prune_opts = self.prune_opts.clone();
prune_opts.opts.ignore_snaps = forget_snaps;
prune_opts.run();

View File

@ -66,27 +66,32 @@ impl Runnable for WebDavCmd {
}
impl WebDavCmd {
/// be careful about self VS RUSTIC_APP.config() usage
/// only the RUSTIC_APP.config() involves the TOML and ENV merged configurations
/// see https://github.com/rustic-rs/rustic/issues/1242
fn inner_run(&self) -> Result<()> {
let config = RUSTIC_APP.config();
let repo = open_repository_indexed(&config.repository)?;
let path_template = self
let path_template = config
.webdav
.path_template
.clone()
.unwrap_or_else(|| "[{hostname}]/[{label}]/{time}".to_string());
let time_template = self
let time_template = config
.webdav
.time_template
.clone()
.unwrap_or_else(|| "%Y-%m-%d_%H-%M-%S".to_string());
let sn_filter = |sn: &_| config.snapshot_filter.matches(sn);
let vfs = if let Some(snap) = &self.snapshot_path {
let vfs = if let Some(snap) = &config.webdav.snapshot_path {
let node = repo.node_from_snapshot_path(snap, sn_filter)?;
Vfs::from_dir_node(&node)
} else {
let snapshots = repo.get_matching_snapshots(sn_filter)?;
let (latest, identical) = if self.symlinks {
let (latest, identical) = if config.webdav.symlinks {
(Latest::AsLink, IdenticalSnapshot::AsLink)
} else {
(Latest::AsDir, IdenticalSnapshot::AsDir)
@ -94,7 +99,8 @@ impl WebDavCmd {
Vfs::from_snapshots(snapshots, &path_template, &time_template, latest, identical)?
};
let addr = self
let addr = config
.webdav
.address
.clone()
.unwrap_or_else(|| "localhost:8000".to_string())
@ -102,7 +108,7 @@ impl WebDavCmd {
.next()
.ok_or_else(|| anyhow!("no address given"))?;
let file_access = self.file_access.as_ref().map_or_else(
let file_access = config.webdav.file_access.as_ref().map_or_else(
|| {
if repo.config().is_hot == Some(true) {
Ok(FilePolicy::Forbidden)