func (vfs FuseVfs) Unlink(name string, context *fuse.Context) fuse.Status { log.Infof(2, "BEGIN Unlink(%v)", name) defer log.Infof(2, "END Unlink(%v)", name) fileId := vfs.parseFileId(name) if fileId == 0 { // can only unlink file symbolic links return fuse.EPERM } file, err := vfs.store.File(fileId) if err != nil { log.Fatal("could not retrieve file '%v': %v", fileId, err) } if file == nil { // reply ok if file doesn't exist otherwise recursive deletes fail return fuse.OK } path := vfs.splitPath(name) switch path[0] { case tagsDir: tagName := path[len(path)-2] //TODO value name tag, err := vfs.store.TagByName(tagName) if err != nil { log.Fatal(err) } if tag == nil { log.Fatalf("could not retrieve tag '%v'.", tagName) } if err = vfs.store.DeleteFileTag(fileId, tag.Id, 0); err != nil { log.Fatal(err) } if err := vfs.store.Commit(); err != nil { log.Fatalf("could not commit transaction: %v", err) } return fuse.OK case queriesDir: return fuse.EPERM } return fuse.ENOSYS }
func Run() { helpCommands = commands parser := NewOptionParser(globalOptions, commands) commandName, options, arguments, err := parser.Parse(os.Args[1:]) if err != nil { log.Fatal(err) } switch { case options.HasOption("--version"): commandName = "version" case options.HasOption("--help"), commandName == "": commandName = "help" } log.Verbosity = options.Count("--verbose") + 1 if dbOption := options.Get("--database"); dbOption != nil && dbOption.Argument != "" { database.Path = dbOption.Argument } command := commands[commandName] if command == nil { log.Fatalf("Invalid command '%v'.", commandName) } err = command.Exec(options, arguments) if err != nil { if err != blankError { log.Warn(err.Error()) } os.Exit(1) } }