mirror of
https://github.com/octoleo/restic.git
synced 2024-12-01 01:03:55 +00:00
rewrite: Don't walk snapshot content if only metadata is modified
This commit is contained in:
parent
893d0d6325
commit
2730d05fce
@ -123,30 +123,40 @@ func rewriteSnapshot(ctx context.Context, repo *repository.Repository, sn *resti
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
selectByName := func(nodepath string) bool {
|
var filter rewriteFilterFunc
|
||||||
for _, reject := range rejectByNameFuncs {
|
|
||||||
if reject(nodepath) {
|
if len(rejectByNameFuncs) > 0 {
|
||||||
return false
|
selectByName := func(nodepath string) bool {
|
||||||
|
for _, reject := range rejectByNameFuncs {
|
||||||
|
if reject(nodepath) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
rewriter := walker.NewTreeRewriter(walker.RewriteOpts{
|
||||||
|
RewriteNode: func(node *restic.Node, path string) *restic.Node {
|
||||||
|
if selectByName(path) {
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
Verbosef(fmt.Sprintf("excluding %s\n", path))
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
DisableNodeCache: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
filter = func(ctx context.Context, sn *restic.Snapshot) (restic.ID, error) {
|
||||||
|
return rewriter.RewriteTree(ctx, repo, "/", *sn.Tree)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
filter = func(ctx context.Context, sn *restic.Snapshot) (restic.ID, error) {
|
||||||
|
return *sn.Tree, nil
|
||||||
}
|
}
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rewriter := walker.NewTreeRewriter(walker.RewriteOpts{
|
|
||||||
RewriteNode: func(node *restic.Node, path string) *restic.Node {
|
|
||||||
if selectByName(path) {
|
|
||||||
return node
|
|
||||||
}
|
|
||||||
Verbosef(fmt.Sprintf("excluding %s\n", path))
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
DisableNodeCache: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
return filterAndReplaceSnapshot(ctx, repo, sn,
|
return filterAndReplaceSnapshot(ctx, repo, sn,
|
||||||
func(ctx context.Context, sn *restic.Snapshot) (restic.ID, error) {
|
filter, opts.DryRun, opts.Forget, metadata, "rewrite")
|
||||||
return rewriter.RewriteTree(ctx, repo, "/", *sn.Tree)
|
|
||||||
}, opts.DryRun, opts.Forget, metadata, "rewrite")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func filterAndReplaceSnapshot(ctx context.Context, repo restic.Repository, sn *restic.Snapshot,
|
func filterAndReplaceSnapshot(ctx context.Context, repo restic.Repository, sn *restic.Snapshot,
|
||||||
|
Loading…
Reference in New Issue
Block a user