rewriter: fixed logic error for processing subsdirectories,

countInserts need incrementing for directories; empty subdirectory gets
countInserts = 1 assigned.
This commit is contained in:
Winfried Plappert 2025-02-19 15:03:53 +00:00
parent fa3534da52
commit f3e1bf437f
1 changed files with 11 additions and 12 deletions

View File

@ -41,7 +41,6 @@ func NewTreeRewriter(opts RewriteOpts) *TreeRewriter {
rw := &TreeRewriter{ rw := &TreeRewriter{
opts: opts, opts: opts,
} }
if !opts.DisableNodeCache { if !opts.DisableNodeCache {
rw.replaces = make(idMap) rw.replaces = make(idMap)
} }
@ -60,7 +59,7 @@ func NewTreeRewriter(opts RewriteOpts) *TreeRewriter {
return rw return rw
} }
func NewSnapshotSizeRewriter(rewriteNode NodeRewriteFunc, keepEmptyDirecory bool) (*TreeRewriter, QueryRewrittenSizeFunc) { func NewSnapshotSizeRewriter(rewriteNode NodeRewriteFunc, keepEmptyDirecoryGlobal bool) (*TreeRewriter, QueryRewrittenSizeFunc) {
var count uint var count uint
var size uint64 var size uint64
@ -74,8 +73,8 @@ func NewSnapshotSizeRewriter(rewriteNode NodeRewriteFunc, keepEmptyDirecory bool
return node return node
}, },
DisableNodeCache: true, DisableNodeCache: true,
// KeepEmptyDirecoryGlobal will force old behaviour for --exclude variants // KeepEmptyDirecoryGlobal = false will force old behaviour for --exclude variants
KeepEmptyDirecoryGlobal: keepEmptyDirecory, KeepEmptyDirecoryGlobal: keepEmptyDirecoryGlobal,
}) })
ss := func() SnapshotSize { ss := func() SnapshotSize {
@ -119,10 +118,9 @@ func (t *TreeRewriter) RewriteTree(ctx context.Context, repo BlobLoadSaver, node
debug.Log("filterTree: %s, nodeId: %s\n", nodepath, nodeID.Str()) debug.Log("filterTree: %s, nodeId: %s\n", nodepath, nodeID.Str())
tb := restic.NewTreeJSONBuilder() tb := restic.NewTreeJSONBuilder()
countInserts := 0
// explicitely exclude empty directory - so it will be saved // explicitely exclude empty directory - so it will be saved
if len(curTree.Nodes) > 0 { if len(curTree.Nodes) > 0 {
countInserts := 0
for _, node := range curTree.Nodes { for _, node := range curTree.Nodes {
if ctx.Err() != nil { if ctx.Err() != nil {
return restic.ID{}, ctx.Err() return restic.ID{}, ctx.Err()
@ -156,7 +154,6 @@ func (t *TreeRewriter) RewriteTree(ctx context.Context, repo BlobLoadSaver, node
if t.opts.KeepEmptyDirecoryGlobal && err == nil && newID.IsNull() { if t.opts.KeepEmptyDirecoryGlobal && err == nil && newID.IsNull() {
continue continue
} }
node.Subtree = &newID node.Subtree = &newID
err = tb.AddNode(node) err = tb.AddNode(node)
if err != nil { if err != nil {
@ -164,13 +161,15 @@ func (t *TreeRewriter) RewriteTree(ctx context.Context, repo BlobLoadSaver, node
} }
countInserts++ countInserts++
} }
} else {
countInserts = 1
}
// check for empty node list // check for empty node list
if t.opts.KeepEmptyDirecoryGlobal && countInserts == 0 { if t.opts.KeepEmptyDirecoryGlobal && countInserts == 0 {
// current subdirectory is empty - due to no includes: create condition here // current subdirectory is empty - due to no includes: create condition here
return restic.ID{}, nil return restic.ID{}, nil
} }
}
tree, err := tb.Finalize() tree, err := tb.Finalize()
if err != nil { if err != nil {