forked from TrueCloudLab/restic
mount: Fix parent inode used by snapshots dir
This commit is contained in:
parent
cfa80e2c6b
commit
0b7291b8b2
2 changed files with 14 additions and 12 deletions
|
@ -68,7 +68,7 @@ func NewRoot(repo restic.Repository, cfg Config) *Root {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
root.SnapshotsDir = NewSnapshotsDir(root, rootInode, NewSnapshotsDirStructure(root, cfg.PathTemplates, cfg.TimeTemplate), "")
|
root.SnapshotsDir = NewSnapshotsDir(root, rootInode, rootInode, NewSnapshotsDirStructure(root, cfg.PathTemplates, cfg.TimeTemplate), "")
|
||||||
|
|
||||||
return root
|
return root
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,10 +17,11 @@ import (
|
||||||
// SnapshotsDir is a actual fuse directory generated from SnapshotsDirStructure
|
// SnapshotsDir is a actual fuse directory generated from SnapshotsDirStructure
|
||||||
// It uses the saved prefix to select the corresponding MetaDirData.
|
// It uses the saved prefix to select the corresponding MetaDirData.
|
||||||
type SnapshotsDir struct {
|
type SnapshotsDir struct {
|
||||||
root *Root
|
root *Root
|
||||||
inode uint64
|
inode uint64
|
||||||
dirStruct *SnapshotsDirStructure
|
parentInode uint64
|
||||||
prefix string
|
dirStruct *SnapshotsDirStructure
|
||||||
|
prefix string
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensure that *SnapshotsDir implements these interfaces
|
// ensure that *SnapshotsDir implements these interfaces
|
||||||
|
@ -28,13 +29,14 @@ var _ = fs.HandleReadDirAller(&SnapshotsDir{})
|
||||||
var _ = fs.NodeStringLookuper(&SnapshotsDir{})
|
var _ = fs.NodeStringLookuper(&SnapshotsDir{})
|
||||||
|
|
||||||
// NewSnapshotsDir returns a new directory structure containing snapshots and "latest" links
|
// NewSnapshotsDir returns a new directory structure containing snapshots and "latest" links
|
||||||
func NewSnapshotsDir(root *Root, inode uint64, dirStruct *SnapshotsDirStructure, prefix string) *SnapshotsDir {
|
func NewSnapshotsDir(root *Root, inode, parentInode uint64, dirStruct *SnapshotsDirStructure, prefix string) *SnapshotsDir {
|
||||||
debug.Log("create snapshots dir, inode %d", inode)
|
debug.Log("create snapshots dir, inode %d", inode)
|
||||||
return &SnapshotsDir{
|
return &SnapshotsDir{
|
||||||
root: root,
|
root: root,
|
||||||
inode: inode,
|
inode: inode,
|
||||||
dirStruct: dirStruct,
|
parentInode: parentInode,
|
||||||
prefix: prefix,
|
dirStruct: dirStruct,
|
||||||
|
prefix: prefix,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +70,7 @@ func (d *SnapshotsDir) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
|
||||||
Type: fuse.DT_Dir,
|
Type: fuse.DT_Dir,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Inode: d.root.inode,
|
Inode: d.parentInode,
|
||||||
Name: "..",
|
Name: "..",
|
||||||
Type: fuse.DT_Dir,
|
Type: fuse.DT_Dir,
|
||||||
},
|
},
|
||||||
|
@ -107,7 +109,7 @@ func (d *SnapshotsDir) Lookup(ctx context.Context, name string) (fs.Node, error)
|
||||||
} else if entry.snapshot != nil {
|
} else if entry.snapshot != nil {
|
||||||
return newDirFromSnapshot(ctx, d.root, fs.GenerateDynamicInode(d.inode, name), entry.snapshot)
|
return newDirFromSnapshot(ctx, d.root, fs.GenerateDynamicInode(d.inode, name), entry.snapshot)
|
||||||
} else {
|
} else {
|
||||||
return NewSnapshotsDir(d.root, fs.GenerateDynamicInode(d.inode, name), d.dirStruct, d.prefix+"/"+name), nil
|
return NewSnapshotsDir(d.root, fs.GenerateDynamicInode(d.inode, name), d.inode, d.dirStruct, d.prefix+"/"+name), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue