blob: 2438220bd414e97f0c2b985301e728c4e1f7e61c [file] [log] [blame]
Lorenz Brunb6a9d3c2022-01-27 18:56:20 +01001package fsspec
2
3import (
4 "fmt"
5 "os"
6
7 "github.com/golang/protobuf/proto"
8)
9
10// ReadMergeSpecs reads FSSpecs from all files in paths and merges them into
11// a single FSSpec.
12func ReadMergeSpecs(paths []string) (*FSSpec, error) {
13 var mergedSpec FSSpec
14 for _, p := range paths {
15 specRaw, err := os.ReadFile(p)
16 if err != nil {
17 return nil, fmt.Errorf("failed to open spec: %w", err)
18 }
19
20 var spec FSSpec
21 if err := proto.UnmarshalText(string(specRaw), &spec); err != nil {
22 return nil, fmt.Errorf("failed to parse spec %q: %w", p, err)
23 }
24 for _, f := range spec.File {
25 mergedSpec.File = append(mergedSpec.File, f)
26 }
27 for _, d := range spec.Directory {
28 mergedSpec.Directory = append(mergedSpec.Directory, d)
29 }
30 for _, s := range spec.SymbolicLink {
31 mergedSpec.SymbolicLink = append(mergedSpec.SymbolicLink, s)
32 }
33 for _, s := range spec.SpecialFile {
34 mergedSpec.SpecialFile = append(mergedSpec.SpecialFile, s)
35 }
36 }
37 return &mergedSpec, nil
38}