func (command UntagCommand) lookupTagIds(store *storage.Storage, names []string) ([]uint, error) { tags, err := store.TagsByNames(names) if err != nil { return nil, fmt.Errorf("could not retrieve tags: %v", err) } for _, name := range names { if !tags.Any(func(tag *database.Tag) bool { return tag.Name == name }) { return nil, fmt.Errorf("no such tag '%v'", name) } } tagIds := make([]uint, len(tags)) for index, tag := range tags { tagIds[index] = tag.Id } return tagIds, nil }
func (command TagCommand) lookupTagIds(store *storage.Storage, names []string) ([]uint, error) { tags, err := store.TagsByNames(names) if err != nil { return nil, fmt.Errorf("could not retrieve tags %v: %v", names, err) } for _, name := range names { if !tags.Any(func(tag *database.Tag) bool { return tag.Name == name }) { log.Infof("New tag '%v'.", name) tag, err := store.AddTag(name) if err != nil { return nil, fmt.Errorf("could not add tag '%v': %v", name, err) } tags = append(tags, tag) } } if command.verbose { log.Infof("retrieving tag implications") } tagIds := make([]uint, len(tags)) for index, tag := range tags { tagIds[index] = tag.Id } implications, err := store.ImplicationsForTags(tagIds...) if err != nil { return nil, fmt.Errorf("could not retrieve implied tags: %v", err) } for _, implication := range implications { if !contains(tagIds, implication.ImpliedTag.Id) { log.Infof("tag '%v' is implied.", implication.ImpliedTag.Name) tagIds = append(tagIds, implication.ImpliedTag.Id) } } return tagIds, nil }