func listTagsForWorkingDirectory(store *storage.Storage, showCount, onePerLine bool) error { file, err := os.Open(".") if err != nil { return fmt.Errorf("could not open working directory: %v", err) } defer file.Close() dirNames, err := file.Readdirnames(0) if err != nil { return fmt.Errorf("could not list working directory contents: %v", err) } sort.Strings(dirNames) for _, dirName := range dirNames { log.Infof(2, "%v: retrieving tags.", dirName) file, err := store.FileByPath(dirName) if err != nil { log.Warn(err.Error()) continue } if file == nil { continue } fileTags, err := store.FileTagsByFileId(file.Id) if err != nil { return fmt.Errorf("could not retrieve file-tags: %v", err) } tagNames, err := lookupTagNames(store, fileTags) if err != nil { return err } if showCount { fmt.Println(dirName + ": " + strconv.Itoa(len(tagNames))) } else { if onePerLine { fmt.Println(dirName) for _, tagName := range tagNames { fmt.Println(tagName) } fmt.Println() } else { fmt.Println(dirName + ": " + strings.Join(tagNames, " ")) } } } return nil }
func expectTags(test *testing.T, store *storage.Storage, file *entities.File, tags ...*entities.Tag) { fileTags, err := store.FileTagsByFileId(file.Id) if err != nil { test.Fatal(err) } if len(fileTags) != len(tags) { test.Fatalf("File '%v' has %v tags but expected %v.", file.Path(), len(fileTags), len(tags)) } for index, filetag := range fileTags { tag := tags[index] if filetag.TagId != tag.Id { test.Fatal("File '%v' is tagged %v but expected %v.", file.Path(), filetag.TagId, tag.Id) } } }
func listTagsForPath(store *storage.Storage, path string, showCount, onePerLine bool) error { log.Infof(2, "%v: retrieving tags.", path) file, err := store.FileByPath(path) if err != nil { return fmt.Errorf("%v: could not retrieve file: %v", path, err) } var tagNames []string if file != nil { fileTags, err := store.FileTagsByFileId(file.Id) if err != nil { return fmt.Errorf("%v: could not retrieve file-tags: %v", path, err) } tagNames, err = lookupTagNames(store, fileTags) if err != nil { return err } } else { _, err := os.Stat(path) if err != nil { switch { case os.IsPermission(err): return fmt.Errorf("%v: permission denied", path) case os.IsNotExist(err): return fmt.Errorf("%v: no such file", path) default: return fmt.Errorf("%v: could not stat file: %v", path, err) } } } if showCount { fmt.Println(len(tagNames)) } else { if onePerLine { for _, tagName := range tagNames { fmt.Println(tagName) } } else { format.Columns(tagNames, terminalWidth()) } } return nil }
func listTagsForPaths(store *storage.Storage, paths []string, showCount, onePerLine bool) error { wereErrors := false for _, path := range paths { log.Infof(2, "%v: retrieving tags.", path) file, err := store.FileByPath(path) if err != nil { log.Warn(err.Error()) continue } var tagNames []string if file != nil { fileTags, err := store.FileTagsByFileId(file.Id) if err != nil { return err } tagNames, err = lookupTagNames(store, fileTags) if err != nil { return err } } else { _, err := os.Stat(path) if err != nil { switch { case os.IsPermission(err): log.Warnf("%v: permission denied", path) wereErrors = true continue case os.IsNotExist(err): log.Warnf("%v: no such file", path) wereErrors = true continue default: return fmt.Errorf("%v: could not stat file: %v", path, err) } } } if showCount { fmt.Println(path + ": " + strconv.Itoa(len(tagNames))) } else { if onePerLine { fmt.Println(path) for _, tagName := range tagNames { fmt.Println(tagName) } fmt.Println() } else { fmt.Println(path + ": " + strings.Join(tagNames, " ")) } } } if wereErrors { return blankError } return nil }