restore: accumulate results of multiple pattern checks

addressing review comments
This commit is contained in:
Srigovind Nayak 2024-06-01 20:37:52 +05:30
parent e579dfe72a
commit 3a52176121
No known key found for this signature in database
GPG Key ID: 3C4A72A34ABD4C43
1 changed files with 14 additions and 11 deletions

View File

@ -150,24 +150,27 @@ func runRestore(ctx context.Context, opts RestoreOptions, gopts GlobalOptions,
}
selectExcludeFilter := func(item string, _ string, node *restic.Node) (selectedForRestore bool, childMayBeSelected bool) {
matched := false
for _, rejectFn := range excludePatternFns {
matched := rejectFn(item)
// An exclude filter is basically a 'wildcard but foo',
// so even if a childMayMatch, other children of a dir may not,
// therefore childMayMatch does not matter, but we should not go down
// unless the dir is selected for restore
selectedForRestore = !matched
childMayBeSelected = selectedForRestore && node.Type == "dir"
return selectedForRestore, childMayBeSelected
matched = matched || rejectFn(item)
}
// An exclude filter is basically a 'wildcard but foo',
// so even if a childMayMatch, other children of a dir may not,
// therefore childMayMatch does not matter, but we should not go down
// unless the dir is selected for restore
selectedForRestore = !matched
childMayBeSelected = selectedForRestore && node.Type == "dir"
return selectedForRestore, childMayBeSelected
}
selectIncludeFilter := func(item string, _ string, node *restic.Node) (selectedForRestore bool, childMayBeSelected bool) {
selectedForRestore = false
childMayBeSelected = false
for _, includeFn := range includePatternFns {
selectedForRestore, childMayBeSelected = includeFn(item)
matched, childMayMatch := includeFn(item)
selectedForRestore = selectedForRestore || matched
childMayBeSelected = childMayBeSelected || childMayMatch
}
childMayBeSelected = childMayBeSelected && node.Type == "dir"