package jiracmd import ( "fmt" "io" "os" "github.com/coryb/figtree" "github.com/coryb/oreo" jira "gopkg.in/Netflix-Skunkworks/go-jira.v1" "gopkg.in/Netflix-Skunkworks/go-jira.v1/jiracli" kingpin "gopkg.in/alecthomas/kingpin.v2" ) type AttachGetOptions struct { AttachmentID string `yaml:"attachment-id,omitempty" json:"attachment-id,omitempty"` OutputFile string `yaml:"output-file,omitempty" json:"output-file,omitempty"` } func CmdAttachGetRegistry() *jiracli.CommandRegistryEntry { opts := AttachGetOptions{} return &jiracli.CommandRegistryEntry{ "Fetch attachment", func(fig *figtree.FigTree, cmd *kingpin.CmdClause) error { jiracli.LoadConfigs(cmd, fig, &opts) return CmdAttachGetUsage(cmd, &opts) }, func(o *oreo.Client, globals *jiracli.GlobalOptions) error { return CmdAttachGet(o, globals, &opts) }, } } func CmdAttachGetUsage(cmd *kingpin.CmdClause, opts *AttachGetOptions) error { cmd.Flag("output", "Write attachment to specified file name, '-' for stdout").Short('o').StringVar(&opts.OutputFile) cmd.Arg("ATTACHMENT-ID", "Attachment id to fetch").StringVar(&opts.AttachmentID) return nil } func CmdAttachGet(o *oreo.Client, globals *jiracli.GlobalOptions, opts *AttachGetOptions) error { attachment, err := jira.GetAttachment(o, globals.Endpoint.Value, opts.AttachmentID) if err != nil { return err } resp, err := o.Get(attachment.Content) if err != nil { return err } defer resp.Body.Close() var output *os.File if opts.OutputFile == "-" { output = os.Stdout } else if opts.OutputFile != "" { output, err = os.Create(opts.OutputFile) if err != nil { return err } defer output.Close() } else { output, err = os.Create(attachment.Filename) if err != nil { return err } defer output.Close() } _, err = io.Copy(output, resp.Body) if err != nil { return err } output.Close() if opts.OutputFile != "-" && !globals.Quiet.Value { fmt.Printf("OK Wrote %s\n", output.Name()) } return nil }