# HG changeset patch # User Peter Sanchez # Date 1624592607 25200 # Thu Jun 24 20:43:27 2021 -0700 # Branch refactor # Node ID 442058d39369a8fa926befe530fcfddc9aa01b41 # Parent 810e216b7f7c6a6a4ceef95a570d4c9268fc49e0 Starting work on glob support. Refs ~petersanchez/tago#7 diff --git a/cmd/tag.go b/cmd/tag.go --- a/cmd/tag.go +++ b/cmd/tag.go @@ -49,13 +49,6 @@ if ltags == "" { // One file - file := lib.NewFile(qm, args[0]) - file.IsIndex = index - file.IndexDesc = desc - if err := file.Load(qm, true); err != nil { - return err - } - tags := make([]lib.Tag, 0, len(args[1:])) for _, arg := range args[1:] { if tag, err := lib.ValidateTagName(arg); err != nil { @@ -69,10 +62,27 @@ return fmt.Errorf("No valid tags were given") } - if err := file.Tag(qm, tags...); err != nil { + files, err := lib.NewFiles(qm, args[0]) + if err != nil { return err } - fmt.Println(lib.RelativePath(file.FullPath())) + + for _, file := range files { + file.IsIndex = index + file.IndexDesc = desc + if err := file.Load(qm, true); err != nil { + if len(files) == 1 { + return err + } + fmt.Println(err) + continue + } + + if err := file.Tag(qm, tags...); err != nil { + return err + } + fmt.Println(lib.RelativePath(file.FullPath())) + } } else { // Potentially multiple files ptags, err := shlex.Split(ltags) @@ -90,18 +100,32 @@ } } + if len(tags) == 0 { + return fmt.Errorf("No valid tags were given") + } + // Tag each file for _, arg := range args { - file := lib.NewFile(qm, arg) - file.IsIndex = index - file.IndexDesc = desc - if err := file.Load(qm, true); err != nil { + files, err := lib.NewFiles(qm, arg) + if err != nil { return err } - if err := file.Tag(qm, tags...); err != nil { - return err + + for _, file := range files { + file.IsIndex = index + file.IndexDesc = desc + if err := file.Load(qm, true); err != nil { + if len(files) == 1 { + return err + } + fmt.Println(err) + continue + } + if err := file.Tag(qm, tags...); err != nil { + return err + } + fmt.Println(lib.RelativePath(file.FullPath())) } - fmt.Println(lib.RelativePath(file.FullPath())) } } return nil diff --git a/lib/helpers.go b/lib/helpers.go --- a/lib/helpers.go +++ b/lib/helpers.go @@ -68,6 +68,26 @@ return file } +// NewFiles returns a slice of *File objects +func NewFiles(qm *QueryManager, fname string) ([]*File, error) { + files := make([]*File, 0) + matches, err := filepath.Glob(fname) + if err != nil { + return nil, err + } + + if len(matches) > 0 { + for _, match := range matches { + file := NewFile(qm, match) + files = append(files, file) + } + } else { + file := NewFile(qm, fname) + files = append(files, file) + } + return files, nil +} + // ValidateTagName ensures given tag(s) are valid func ValidateTagName(tag string) (string, error) { tag = strings.ToLower(tag) // Always lowercase