blob: f5a45e33fd3040029534a062696c4c41f03bf7de [file] [log] [blame]
package fsspec
import (
"fmt"
"os"
"google.golang.org/protobuf/encoding/prototext"
)
// ReadMergeSpecs reads FSSpecs from all files in paths and merges them into
// a single FSSpec.
func ReadMergeSpecs(paths []string) (*FSSpec, error) {
var mergedSpec FSSpec
for _, p := range paths {
specRaw, err := os.ReadFile(p)
if err != nil {
return nil, fmt.Errorf("failed to open spec: %w", err)
}
var spec FSSpec
if err := prototext.Unmarshal(specRaw, &spec); err != nil {
return nil, fmt.Errorf("failed to parse spec %q: %w", p, err)
}
mergedSpec.File = append(mergedSpec.File, spec.File...)
mergedSpec.Directory = append(mergedSpec.Directory, spec.Directory...)
mergedSpec.SymbolicLink = append(mergedSpec.SymbolicLink, spec.SymbolicLink...)
mergedSpec.SpecialFile = append(mergedSpec.SpecialFile, spec.SpecialFile...)
}
return &mergedSpec, nil
}