func listValuesForTag(store *storage.Storage, tagName string, showCount, onePerLine bool) error { tag, err := store.TagByName(tagName) if err != nil { return fmt.Errorf("could not retrieve tag '%v': %v", tagName, err) } if tag == nil { return fmt.Errorf("no such tag, '%v'.", tagName) } log.Infof(2, "retrieving values for tag '%v'.", tagName) values, err := store.ValuesByTag(tag.Id) if err != nil { return fmt.Errorf("could not retrieve values for tag '%v': %v", tagName, err) } if showCount { fmt.Println(len(values)) } else { if onePerLine { for _, value := range values { fmt.Println(value.Name) } } else { valueNames := make([]string, len(values)) for index, value := range values { valueNames[index] = value.Name } format.Columns(valueNames, terminalWidth()) } } return nil }
func getOrCreateTag(store *storage.Storage, tagName string) (*entities.Tag, error) { tag, err := store.TagByName(tagName) if err != nil { return nil, fmt.Errorf("could not look up tag '%v': %v", tagName, err) } if tag == nil { tag, err = store.AddTag(tagName) if err != nil { return nil, fmt.Errorf("could not create tag '%v': %v", tagName, err) } log.Warnf("New tag '%v'.", tagName) } return tag, nil }
func listValuesForTags(store *storage.Storage, tagNames []string, showCount, onePerLine bool) error { wereErrors := false for _, tagName := range tagNames { tag, err := store.TagByName(tagName) if err != nil { return fmt.Errorf("could not retrieve tag '%v': %v", tagName, err) } if tag == nil { log.Warnf("no such tag, '%v'.", tagName) wereErrors = true continue } log.Infof(2, "retrieving values for tag '%v'.", tagName) values, err := store.ValuesByTag(tag.Id) if err != nil { return fmt.Errorf("could not retrieve values for tag '%v': %v", tagName, err) } if showCount { fmt.Printf("%v: %v\n", tagName, len(values)) } else { if onePerLine { fmt.Println(tagName) for _, value := range values { fmt.Println(value.Name) } fmt.Println() } else { valueNames := make([]string, len(values)) for index, value := range values { valueNames[index] = value.Name } fmt.Printf("%v: %v\n", tagName, strings.Join(valueNames, " ")) } } } if wereErrors { return blankError } return nil }
func (command DeleteCommand) deleteTag(store *storage.Storage, tagName string) error { tag, err := store.TagByName(tagName) if err != nil { return fmt.Errorf("could not retrieve tag '%v': %v", tagName, err) } if tag == nil { return fmt.Errorf("no such tag '%v'.", tagName) } if command.verbose { log.Infof("finding files tagged '%v'.", tagName) } fileTags, err := store.FileTagsByTagId(tag.Id) if err != nil { return fmt.Errorf("could not retrieve taggings for tag '%v': %v", tagName, err) } if command.verbose { log.Infof("removing applications of tag '%v'.", tagName) } err = store.RemoveFileTagsByTagId(tag.Id) if err != nil { return fmt.Errorf("could not remove taggings for tag '%v': %v", tagName, err) } if command.verbose { log.Infof("removing tags implications involving tag '%v'.", tagName) } err = store.RemoveImplicationsForTagId(tag.Id) if err != nil { return fmt.Errorf("could not remove tag implications involving tag '%v': %v", tagName, err) } if command.verbose { log.Infof("deleting tag '%v'.", tagName) } err = store.DeleteTag(tag.Id) if err != nil { return fmt.Errorf("could not delete tag '%v': %v", tagName, err) } if command.verbose { log.Infof("identifying files left untagged as a result of tag deletion.") } removedFileCount := 0 for _, fileTag := range fileTags { count, err := store.FileTagCountByFileId(fileTag.FileId) if err != nil { return fmt.Errorf("could not retrieve taggings count for file #%v: %v", fileTag.FileId, err) } if count == 0 { err := store.RemoveFile(fileTag.FileId) if err != nil { return fmt.Errorf("could not remove file #%v: %v", fileTag.FileId, err) } removedFileCount += 1 } } if command.verbose { log.Infof("removed %v untagged files.", removedFileCount) } return nil }