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 }