blob: 9051e675a957b85f69b1ff58e1f5dda3a7699008 [file] [log] [blame]
/*
Copyright © 2021 Aspect Build Systems Inc
Not licensed for re-use.
*/
package bazel
import (
"encoding/base64"
"fmt"
"io"
"io/ioutil"
"google.golang.org/protobuf/proto"
)
func (b *Bazel) Flags() (map[string]*FlagInfo, error) {
r, w := io.Pipe()
decoder := base64.NewDecoder(base64.StdEncoding, r)
bazelErrs := make(chan error, 1)
defer close(bazelErrs)
go func() {
defer w.Close()
_, err := b.RunCommand([]string{"help", "flags-as-proto"}, w)
bazelErrs <- err
}()
helpProtoBytes, err := ioutil.ReadAll(decoder)
if err != nil {
return nil, fmt.Errorf("failed to get Bazel flags: %w", err)
}
if err := <-bazelErrs; err != nil {
return nil, fmt.Errorf("failed to get Bazel flags: %w", err)
}
flagCollection := &FlagCollection{}
if err := proto.Unmarshal(helpProtoBytes, flagCollection); err != nil {
return nil, fmt.Errorf("failed to get Bazel flags: %w", err)
}
flags := make(map[string]*FlagInfo)
for i := range flagCollection.FlagInfos {
flags[*flagCollection.FlagInfos[i].Name] = flagCollection.FlagInfos[i]
}
return flags, nil
}