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 }