github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/fly/commands/internal/flaghelpers/resource_flag.go (about)

     1  package flaghelpers
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"strings"
     7  
     8  	"github.com/pf-qiu/concourse/v6/atc"
     9  )
    10  
    11  type ResourceFlag struct {
    12  	PipelineRef  atc.PipelineRef
    13  	ResourceName string
    14  }
    15  
    16  func (flag ResourceFlag) String() string {
    17  	return fmt.Sprintf("%s/%s", flag.PipelineRef, flag.ResourceName)
    18  }
    19  
    20  func (flag *ResourceFlag) UnmarshalFlag(value string) error {
    21  	flag.PipelineRef = atc.PipelineRef{}
    22  
    23  	resourceNameIdx := strings.LastIndex(value, "/")
    24  	if resourceNameIdx == -1 {
    25  		return errors.New("argument format should be <pipeline>/<resource>")
    26  	}
    27  
    28  	flag.ResourceName = value[resourceNameIdx+1:]
    29  	if flag.ResourceName == "" {
    30  		return errors.New("argument format should be <pipeline>/<resource>")
    31  	}
    32  
    33  	vs := strings.SplitN(value[:resourceNameIdx], "/", 2)
    34  	flag.PipelineRef.Name = vs[0]
    35  	if len(vs) == 2 {
    36  		var err error
    37  		flag.PipelineRef.InstanceVars, err = unmarshalInstanceVars(vs[1])
    38  		if err != nil {
    39  			return errors.New(err.Error() + "/<resource>")
    40  		}
    41  	}
    42  
    43  	return nil
    44  }