func (vfs FuseVfs) Unlink(name string, context *fuse.Context) fuse.Status { log.Infof("BEGIN Unlink(%v)", name) defer log.Infof("END Unlink(%v)", name) fileId, err := vfs.parseFileId(name) if err != nil { log.Fatal("Could not unlink: ", err) } if fileId == 0 { // cannot unlink tag directories return fuse.EPERM } path := vfs.splitPath(name) tagNames := path[1 : len(path)-1] for _, tagName := range tagNames { tag, err := vfs.store.Db.TagByName(tagName) if err != nil { log.Fatal(err) } if tag == nil { log.Fatalf("Could not retrieve tag '%v'.", tagName) } err = vfs.store.RemoveFileTag(fileId, tag.Id) if err != nil { log.Fatal(err) } } return fuse.OK }
func main() { helpCommand := &commands.HelpCommand{} commands := map[cli.CommandName]cli.Command{ "copy": commands.CopyCommand{}, "delete": commands.DeleteCommand{}, "dupes": commands.DupesCommand{}, "files": commands.FilesCommand{}, "help": helpCommand, "imply": commands.ImplyCommand{}, "merge": commands.MergeCommand{}, "mount": commands.MountCommand{}, "rename": commands.RenameCommand{}, "repair": commands.RepairCommand{}, "stats": commands.StatsCommand{}, "status": commands.StatusCommand{}, "tag": commands.TagCommand{}, "tags": commands.TagsCommand{}, "unmount": commands.UnmountCommand{}, "untag": commands.UntagCommand{}, "version": commands.VersionCommand{}, "vfs": commands.VfsCommand{}, } helpCommand.Commands = commands globalOptions := cli.Options{cli.Option{"--verbose", "-v", "show verbose messages", false, ""}, cli.Option{"--help", "-h", "show help and exit", false, ""}, cli.Option{"--version", "-V", "show version information and exit", false, ""}} parser := cli.NewParser(globalOptions, commands) commandName, options, arguments, err := parser.Parse(os.Args[1:]) if err != nil { log.Fatal(err) } if commandName == "" { commandName = "help" } command := commands[commandName] if command == nil { log.Fatalf("Invalid command '%v'.", commandName) } err = command.Exec(options, arguments) if err != nil { log.Fatal(err.Error()) } }