diff --git a/parse.go b/parse.go index 36a7163..9094508 100644 --- a/parse.go +++ b/parse.go @@ -72,27 +72,30 @@ func ParseSpec(r io.Reader) (*DirectoryHierarchy, error) { break } } + // parse the options f := strings.Fields(str) e.Name = filepath.Clean(f[0]) + e.Keywords = StringToKeyVals(f[1:]) + // TODO: gather keywords if using tar stream + var isDir bool + for _, kv := range e.Keywords { + if kv.Keyword() == "type" { + isDir = kv.Value() == "dir" + } + } if strings.Contains(e.Name, "/") { e.Type = FullType } else { e.Type = RelativeType - } - e.Keywords = StringToKeyVals(f[1:]) - // TODO: gather keywords if using tar stream - e.Parent = creator.curDir - for i := range e.Keywords { - kv := KeyVal(e.Keywords[i]) - if kv.Keyword() == "type" { - if kv.Value() == "dir" { - creator.curDir = &e - } else { - creator.curEnt = &e - } + e.Parent = creator.curDir + if isDir { + creator.curDir = &e } } + if !isDir { + creator.curEnt = &e + } e.Set = creator.curSet default: // TODO(vbatts) log a warning?