From cac9aa4483995a2cf0335b5333c71659bea3b3c0 Mon Sep 17 00:00:00 2001
From: "Piotr S. Staszewski"
Date: Tue, 1 Jul 2014 21:49:17 +0200
Subject: [PATCH] fs: handle directory permanode titles
Set corresponding permanode title on new root,
new directory and directory rename.
Change-Id: I5432e14ef57d6c0c5555b11e895e8b8ad6d8efcf
---
pkg/fs/mut.go | 29 ++++++++++++++++++++++++-----
pkg/fs/roots.go | 16 +++++++++++++---
2 files changed, 37 insertions(+), 8 deletions(-)
diff --git a/pkg/fs/mut.go b/pkg/fs/mut.go
index c584a6e08..5d3518d33 100644
--- a/pkg/fs/mut.go
+++ b/pkg/fs/mut.go
@@ -380,6 +380,12 @@ func (n *mutDir) creat(name string, typ nodeType) (fs.Node, error) {
_, err = n.fs.client.UploadAndSignBlob(claim)
return
})
+ grp.Go(func() (err error) {
+ // Set the permanode title to the directory name
+ claim := schema.NewSetAttributeClaim(pr.BlobRef, "title", name)
+ _, err = n.fs.client.UploadAndSignBlob(claim)
+ return
+ })
}
if err := grp.Err(); err != nil {
return nil, err
@@ -478,11 +484,24 @@ func (n *mutDir) Rename(req *fuse.RenameRequest, newDir fs.Node, intr fs.Intr) f
return fuse.EIO
}
- delClaim := schema.NewDelAttributeClaim(n.permanode, "camliPath:"+req.OldName, "")
- delClaim.SetClaimDate(now)
- _, err = n.fs.client.UploadAndSignBlob(delClaim)
- if err != nil {
- log.Printf("Upload rename src unlink error: %v", err)
+ var grp syncutil.Group
+ // Unlink the dest permanode from the source.
+ grp.Go(func() (err error) {
+ delClaim := schema.NewDelAttributeClaim(n.permanode, "camliPath:"+req.OldName, "")
+ delClaim.SetClaimDate(now)
+ _, err = n.fs.client.UploadAndSignBlob(delClaim)
+ return
+ })
+ // If target is a directory then update its title.
+ if dir, ok := target.(*mutDir); ok {
+ grp.Go(func() (err error) {
+ claim := schema.NewSetAttributeClaim(dir.permanode, "title", req.NewName)
+ _, err = n.fs.client.UploadAndSignBlob(claim)
+ return
+ })
+ }
+ if err := grp.Err(); err != nil {
+ log.Printf("Upload rename unlink/title error: %v", err)
return fuse.EIO
}
diff --git a/pkg/fs/roots.go b/pkg/fs/roots.go
index b5dc12395..e5c428c75 100644
--- a/pkg/fs/roots.go
+++ b/pkg/fs/roots.go
@@ -305,10 +305,20 @@ func (n *rootsDir) Mkdir(req *fuse.MkdirRequest, intr fs.Intr) (fs.Node, fuse.Er
return nil, fuse.EIO
}
+ var grp syncutil.Group
// Add a camliRoot attribute to the root permanode.
- claim := schema.NewSetAttributeClaim(pr.BlobRef, "camliRoot", name)
- _, err = n.fs.client.UploadAndSignBlob(claim)
- if err != nil {
+ grp.Go(func() (err error) {
+ claim := schema.NewSetAttributeClaim(pr.BlobRef, "camliRoot", name)
+ _, err = n.fs.client.UploadAndSignBlob(claim)
+ return
+ })
+ // Set the title of the root permanode to the root name.
+ grp.Go(func() (err error) {
+ claim := schema.NewSetAttributeClaim(pr.BlobRef, "title", name)
+ _, err = n.fs.client.UploadAndSignBlob(claim)
+ return
+ })
+ if err := grp.Err(); err != nil {
log.Printf("rootsDir.Create(%q): %v", name, err)
return nil, fuse.EIO
}