Skip to content

Commit

Permalink
add browse command and implement -b option for most operations
Browse files Browse the repository at this point in the history
  • Loading branch information
coryb committed Aug 21, 2017
1 parent f32cc70 commit a91b9d5
Show file tree
Hide file tree
Showing 95 changed files with 599 additions and 9,853 deletions.
9 changes: 5 additions & 4 deletions cmd/jira/main.go
Expand Up @@ -249,6 +249,11 @@ func main() {
Command: "unexport-templates",
Entry: cli.CmdUnexportTemplatesRegistry(),
},
jiracli.CommandRegistry{
Command: "browse",
Entry: cli.CmdBrowseRegistry(),
Aliases: []string{"b"},
},
}

cli.Register(app, registry)
Expand Down Expand Up @@ -462,10 +467,6 @@ func main() {

// var err error
// switch command {
// case "browse":
// requireArgs(1)
// opts["browse"] = true
// err = c.Browse(args[0])
// case "request":
// requireArgs(1)
// data := ""
Expand Down
22 changes: 6 additions & 16 deletions glide.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions glide.yaml
Expand Up @@ -16,6 +16,7 @@ import:
- package: github.com/tmc/keyring
- package: github.com/kballard/go-shellquote
- package: github.com/jinzhu/copier
- package: github.com/pkg/browser
testImport:
- package: github.com/stretchr/testify
version: ^1.1.4
Expand Down
5 changes: 4 additions & 1 deletion jiracli/assign.go
Expand Up @@ -30,6 +30,7 @@ func (jc *JiraCli) CmdAssignUsage(cmd *kingpin.CmdClause, opts *AssignOptions) e
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
jc.BrowseUsage(cmd, &opts.GlobalOptions)
cmd.Flag("default", "use default user for assignee").PreAction(func(ctx *kingpin.ParseContext) error {
if flagValue(ctx, "default") == "true" {
opts.Assignee = "-1"
Expand All @@ -50,7 +51,9 @@ func (jc *JiraCli) CmdAssign(opts *AssignOptions) error {

fmt.Printf("OK %s %s/browse/%s\n", opts.Issue, jc.Endpoint, opts.Issue)

// FIXME implement browse
if opts.Browse {
return jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.Issue})
}

return nil
}
8 changes: 6 additions & 2 deletions jiracli/block.go
Expand Up @@ -21,7 +21,6 @@ func (jc *JiraCli) CmdBlockRegistry() *CommandRegistryEntry {
},
LinkIssueRequest: jiradata.LinkIssueRequest{
Type: &jiradata.IssueLinkType{
// FIXME is this consitent across multiple jira installs?
Name: "Blocks",
},
InwardIssue: &jiradata.IssueRef{},
Expand All @@ -44,6 +43,7 @@ func (jc *JiraCli) CmdBlockUsage(cmd *kingpin.CmdClause, opts *BlockOptions) err
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
jc.BrowseUsage(cmd, &opts.GlobalOptions)
jc.EditorUsage(cmd, &opts.GlobalOptions)
jc.TemplateUsage(cmd, &opts.GlobalOptions)
cmd.Flag("comment", "Comment message when marking issue as blocker").Short('m').PreAction(func(ctx *kingpin.ParseContext) error {
Expand All @@ -67,7 +67,11 @@ func (jc *JiraCli) CmdBlock(opts *BlockOptions) error {
fmt.Printf("OK %s %s/browse/%s\n", opts.Issue, jc.Endpoint, opts.Issue)
fmt.Printf("OK %s %s/browse/%s\n", opts.Blocker, jc.Endpoint, opts.Blocker)

// FIXME implement browse
if opts.Browse {
if err := jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.Issue}); err != nil {
return jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.Blocker})
}
}

return nil
}
41 changes: 41 additions & 0 deletions jiracli/browse.go
@@ -0,0 +1,41 @@
package jiracli

import (
"fmt"

"github.com/pkg/browser"
kingpin "gopkg.in/alecthomas/kingpin.v2"
)

type BrowseOptions struct {
GlobalOptions
Issue string
}

func (jc *JiraCli) CmdBrowseRegistry() *CommandRegistryEntry {
opts := BrowseOptions{}

return &CommandRegistryEntry{
"Open issue in browser",
func() error {
return jc.CmdBrowse(&opts)
},
func(cmd *kingpin.CmdClause) error {
return jc.CmdBrowseUsage(cmd, &opts)
},
}
}

func (jc *JiraCli) CmdBrowseUsage(cmd *kingpin.CmdClause, opts *BrowseOptions) error {
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
cmd.Arg("ISSUE", "Issue to browse to").Required().StringVar(&opts.Issue)

return nil
}

// CmdBrowse open the default system browser to the provided issue
func (jc *JiraCli) CmdBrowse(opts *BrowseOptions) error {
return browser.OpenURL(fmt.Sprintf("%s/browse/%s", jc.Endpoint, opts.Issue))
}
20 changes: 5 additions & 15 deletions jiracli/cli.go
Expand Up @@ -47,7 +47,7 @@ type Exit struct {
}

type GlobalOptions struct {
Browse string `json:"browse,omitempty" yaml:"browse,omitempty"`
Browse bool `json:"browse,omitempty" yaml:"browse,omitempty"`
Editor string `json:"editor,omitempty" yaml:"editor,omitempty"`
SkipEditing bool `json:"noedit,omitempty" yaml:"noedit,omitempty"`
PasswordSource string `json:"password-source,omitempty" yaml:"password-source,omitempty"`
Expand Down Expand Up @@ -87,6 +87,10 @@ func (jc *JiraCli) LoadConfigs(cmd *kingpin.CmdClause, opts interface{}) {
})
}

func (jc *JiraCli) BrowseUsage(cmd *kingpin.CmdClause, opts *GlobalOptions) {
cmd.Flag("browse", "Open issue(s) in browser after operation").Short('b').BoolVar(&opts.Browse)
}

func (jc *JiraCli) EditorUsage(cmd *kingpin.CmdClause, opts *GlobalOptions) {
cmd.Flag("editor", "Editor to use").StringVar(&opts.Editor)
}
Expand Down Expand Up @@ -460,20 +464,6 @@ func (jc *JiraCli) editLoop(opts *GlobalOptions, input interface{}, output inter
// return nil
// }

// // Browse will open up your default browser to the provided issue
// func (c *Cli) Browse(issue string) error {
// if val, ok := c.opts["browse"].(bool); ok && val {
// if runtime.GOOS == "darwin" {
// return exec.Command("open", fmt.Sprintf("%s/browse/%s", c.endpoint, issue)).Run()
// } else if runtime.GOOS == "linux" {
// return exec.Command("xdg-open", fmt.Sprintf("%s/browse/%s", c.endpoint, issue)).Run()
// } else if runtime.GOOS == "windows" {
// return exec.Command("cmd", "/c", "start", fmt.Sprintf("%s/browse/%s", c.endpoint, issue)).Run()
// }
// }
// return nil
// }

// // SaveData will write out the yaml formated --saveFile file with provided data
// func (c *Cli) SaveData(data interface{}) error {
// if val, ok := c.opts["saveFile"].(string); ok && val != "" {
Expand Down
5 changes: 4 additions & 1 deletion jiracli/comment.go
Expand Up @@ -36,6 +36,7 @@ func (jc *JiraCli) CmdCommentUsage(cmd *kingpin.CmdClause, opts *CommentOptions)
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
jc.BrowseUsage(cmd, &opts.GlobalOptions)
jc.EditorUsage(cmd, &opts.GlobalOptions)
jc.TemplateUsage(cmd, &opts.GlobalOptions)
cmd.Flag("comment", "Comment message for issue").Short('m').PreAction(func(ctx *kingpin.ParseContext) error {
Expand Down Expand Up @@ -64,7 +65,9 @@ func (jc *JiraCli) CmdComment(opts *CommentOptions) error {

fmt.Printf("OK %s %s/browse/%s\n", opts.Issue, jc.Endpoint, opts.Issue)

// FIXME implement browse
if opts.Browse {
return jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.Issue})
}

return nil
}
5 changes: 4 additions & 1 deletion jiracli/create.go
Expand Up @@ -38,6 +38,7 @@ func (jc *JiraCli) CmdCreateUsage(cmd *kingpin.CmdClause, opts *CreateOptions) e
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
jc.BrowseUsage(cmd, &opts.GlobalOptions)
jc.EditorUsage(cmd, &opts.GlobalOptions)
jc.TemplateUsage(cmd, &opts.GlobalOptions)
cmd.Flag("noedit", "Disable opening the editor").BoolVar(&opts.SkipEditing)
Expand Down Expand Up @@ -87,7 +88,9 @@ func (jc *JiraCli) CmdCreate(opts *CreateOptions) error {

fmt.Printf("OK %s %s/browse/%s\n", issueResp.Key, jc.Endpoint, issueResp.Key)

// FIXME implement browse
if opts.Browse {
return jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, issueResp.Key})
}
return nil
}

Expand Down
9 changes: 7 additions & 2 deletions jiracli/dup.go
Expand Up @@ -21,7 +21,6 @@ func (jc *JiraCli) CmdDupRegistry() *CommandRegistryEntry {
},
LinkIssueRequest: jiradata.LinkIssueRequest{
Type: &jiradata.IssueLinkType{
// FIXME is this consitent across multiple jira installs?
Name: "Duplicate",
},
InwardIssue: &jiradata.IssueRef{},
Expand All @@ -44,6 +43,7 @@ func (jc *JiraCli) CmdDupUsage(cmd *kingpin.CmdClause, opts *DupOptions) error {
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
jc.BrowseUsage(cmd, &opts.GlobalOptions)
jc.EditorUsage(cmd, &opts.GlobalOptions)
jc.TemplateUsage(cmd, &opts.GlobalOptions)
cmd.Flag("comment", "Comment message when marking issue as duplicate").Short('m').PreAction(func(ctx *kingpin.ParseContext) error {
Expand Down Expand Up @@ -85,9 +85,14 @@ func (jc *JiraCli) CmdDup(opts *DupOptions) error {
}
}

fmt.Printf("OK %s %s/browse/%s\n", opts.OutwardIssue.Key, jc.Endpoint, opts.OutwardIssue.Key)
fmt.Printf("OK %s %s/browse/%s\n", opts.InwardIssue.Key, jc.Endpoint, opts.InwardIssue.Key)

// FIXME implement browse
if opts.Browse {
if err := jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.OutwardIssue.Key}); err != nil {
return jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.InwardIssue.Key})
}
}

return nil
}
9 changes: 7 additions & 2 deletions jiracli/edit.go
Expand Up @@ -39,6 +39,7 @@ func (jc *JiraCli) CmdEditUsage(cmd *kingpin.CmdClause, opts *EditOptions) error
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
jc.BrowseUsage(cmd, &opts.GlobalOptions)
jc.EditorUsage(cmd, &opts.GlobalOptions)
jc.TemplateUsage(cmd, &opts.GlobalOptions)
cmd.Flag("noedit", "Disable opening the editor").BoolVar(&opts.SkipEditing)
Expand Down Expand Up @@ -91,7 +92,9 @@ func (jc *JiraCli) CmdEdit(opts *EditOptions) error {
}
fmt.Printf("OK %s %s/browse/%s\n", opts.Issue, jc.Endpoint, opts.Issue)

// FIXME implement browse
if opts.Browse {
return jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.Issue})
}
}
results, err := jc.Search(opts)
if err != nil {
Expand All @@ -116,7 +119,9 @@ func (jc *JiraCli) CmdEdit(opts *EditOptions) error {
}
fmt.Printf("OK %s %s/browse/%s\n", issueData.Key, jc.Endpoint, issueData.Key)

// FIXME implement browse
if opts.Browse {
return jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, issueData.Key})
}
}
return nil
}
7 changes: 6 additions & 1 deletion jiracli/issuelink.go
Expand Up @@ -39,6 +39,7 @@ func (jc *JiraCli) CmdIssueLinkUsage(cmd *kingpin.CmdClause, opts *IssueLinkOpti
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
jc.BrowseUsage(cmd, &opts.GlobalOptions)
jc.EditorUsage(cmd, &opts.GlobalOptions)
jc.TemplateUsage(cmd, &opts.GlobalOptions)
cmd.Flag("comment", "Comment message when linking issue").Short('m').PreAction(func(ctx *kingpin.ParseContext) error {
Expand All @@ -63,7 +64,11 @@ func (jc *JiraCli) CmdIssueLink(opts *IssueLinkOptions) error {
fmt.Printf("OK %s %s/browse/%s\n", opts.InwardIssue.Key, jc.Endpoint, opts.InwardIssue.Key)
fmt.Printf("OK %s %s/browse/%s\n", opts.OutwardIssue.Key, jc.Endpoint, opts.OutwardIssue.Key)

// FIXME implement browse
if opts.Browse {
if err := jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.OutwardIssue.Key}); err != nil {
return jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.InwardIssue.Key})
}
}

return nil
}
7 changes: 6 additions & 1 deletion jiracli/rank.go
Expand Up @@ -34,6 +34,7 @@ func (jc *JiraCli) CmdRankUsage(cmd *kingpin.CmdClause, opts *RankOptions) error
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
jc.BrowseUsage(cmd, &opts.GlobalOptions)
cmd.Arg("FIRST-ISSUE", "first issue").Required().StringVar(&opts.First)
cmd.Arg("after|before", "rank ordering").Required().HintOptions("after", "before").EnumVar(&opts.Order, "after", "before")
cmd.Arg("SECOND-ISSUE", "second issue").Required().StringVar(&opts.Second)
Expand All @@ -59,7 +60,11 @@ func (jc *JiraCli) CmdRank(opts *RankOptions) error {
fmt.Printf("OK %s %s/browse/%s\n", opts.First, jc.Endpoint, opts.First)
fmt.Printf("OK %s %s/browse/%s\n", opts.Second, jc.Endpoint, opts.Second)

// FIXME implement browse
if opts.Browse {
if err := jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.First}); err != nil {
return jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.Second})
}
}

return nil
}
5 changes: 4 additions & 1 deletion jiracli/subtask.go
Expand Up @@ -40,6 +40,7 @@ func (jc *JiraCli) CmdSubtaskUsage(cmd *kingpin.CmdClause, opts *SubtaskOptions)
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
jc.BrowseUsage(cmd, &opts.GlobalOptions)
jc.EditorUsage(cmd, &opts.GlobalOptions)
jc.TemplateUsage(cmd, &opts.GlobalOptions)
cmd.Flag("noedit", "Disable opening the editor").BoolVar(&opts.SkipEditing)
Expand Down Expand Up @@ -103,6 +104,8 @@ func (jc *JiraCli) CmdSubtask(opts *SubtaskOptions) error {

fmt.Printf("OK %s %s/browse/%s\n", issueResp.Key, jc.Endpoint, issueResp.Key)

// FIXME implement browse
if opts.Browse {
return jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.Issue})
}
return nil
}
5 changes: 4 additions & 1 deletion jiracli/transition.go
Expand Up @@ -45,6 +45,7 @@ func (jc *JiraCli) CmdTransitionUsage(cmd *kingpin.CmdClause, opts *TransitionOp
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
jc.BrowseUsage(cmd, &opts.GlobalOptions)
jc.TemplateUsage(cmd, &opts.GlobalOptions)
cmd.Flag("comment", "Comment message for issue").Short('m').PreAction(func(ctx *kingpin.ParseContext) error {
opts.Overrides["comment"] = flagValue(ctx, "comment")
Expand Down Expand Up @@ -125,6 +126,8 @@ func (jc *JiraCli) CmdTransition(opts *TransitionOptions) error {
}
fmt.Printf("OK %s %s/browse/%s\n", issueData.Key, jc.Endpoint, issueData.Key)

// FIXME implement browse
if opts.Browse {
return jc.CmdBrowse(&BrowseOptions{opts.GlobalOptions, opts.Issue})
}
return nil
}

0 comments on commit a91b9d5

Please sign in to comment.