blob: 498f09b47413ea9473fc27c62a5c53eee9ecb392 [file] [log] [blame]
// Copyright 2020 The LUCI Authors.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package luciexe
import (
bbpb ""
const (
// OutputCLIArg is the CLI argument to luciexe binaries to instruct them to
// dump their final Build message. The value of this flag must be an absolute
// path to a file which doesn't exist in a directory which does (and which the
// luciexe binary has access to write in). See Output*FileExt for valid
// extensions.
OutputCLIArg = "--output"
// OutputFlag can be used as a flag.Value to parse the OutputCLIArg as part of
// your FlagSet.
type OutputFlag struct {
Path string
Codec BuildFileCodec
var _ flag.Value = (*OutputFlag)(nil)
// Set implements flag.Value.
func (o *OutputFlag) Set(value string) error {
codec, err := BuildFileCodecForPath(value)
if err != nil {
return err
o.Path = value
o.Codec = codec
return nil
func (o *OutputFlag) String() string {
if o == nil {
return ""
return o.Path
// Write writes the build message to this output file with the appropriate
// encoding.
func (o *OutputFlag) Write(build *bbpb.Build) error {
return WriteBuildFile(o.Path, build)
// AddOutputFlagToSet adds a OutputFlag to the FlagSet with OutputCLIArg and
// a useful helpstring.
// Returns the added *OutputFlag. The default value has a Codec of
// BuildFileNone.
func AddOutputFlagToSet(fs *flag.FlagSet) *OutputFlag {
ret := &OutputFlag{Codec: buildFileCodecNoop{}}
fs.Var(ret, strings.TrimLeft(OutputCLIArg, "-"),
"a path to a `build_file` to write the final build.proto into. Valid file extensions: "+validCodecExtsStr)
return ret