From f7f1e8e406e5ee8b8915f5854a513cc7cb6d3f0c Mon Sep 17 00:00:00 2001 From: James Bardin Date: Thu, 6 Jul 2017 11:34:47 -0400 Subject: [PATCH] Sort arguments in Meta.process Meta.process was relying on the system readdir to order the arguments, but readdir doesn't guarantee any ordering. Read the directory contents as a whole and sort them in place before adding the tfvars files. --- command/meta.go | 39 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/command/meta.go b/command/meta.go index c84f7550e..aca94b1a8 100644 --- a/command/meta.go +++ b/command/meta.go @@ -11,6 +11,7 @@ import ( "log" "os" "path/filepath" + "sort" "strconv" "strings" "time" @@ -398,38 +399,26 @@ func (m *Meta) process(args []string, vars bool) ([]string, error) { if err != nil { return nil, err } - f, err := os.Open(wd) + + fis, err := ioutil.ReadDir(wd) if err != nil { return nil, err } - defer f.Close() - fi, err := f.Stat() - if err != nil { - return nil, err - } - if !fi.IsDir() { - return nil, err - } + // make sure we add the files in order + sort.Slice(fis, func(i, j int) bool { + return fis[i].Name() < fis[j].Name() + }) - err = nil - for err != io.EOF { - var fis []os.FileInfo - fis, err = f.Readdir(128) - if err != nil && err != io.EOF { - return nil, err + for _, fi := range fis { + name := fi.Name() + // Ignore directories, non-var-files, and ignored files + if fi.IsDir() || !isAutoVarFile(name) || config.IsIgnoredFile(name) { + continue } - for _, fi := range fis { - name := fi.Name() - // Ignore directories, non-var-files, and ignored files - if fi.IsDir() || !isAutoVarFile(name) || config.IsIgnoredFile(name) { - continue - } - - m.autoKey = "var-file-default" - preArgs = append(preArgs, "-"+m.autoKey, name) - } + m.autoKey = "var-file-default" + preArgs = append(preArgs, "-"+m.autoKey, name) } args = append(preArgs, args...)