Skip to content
This repository has been archived by the owner on May 24, 2019. It is now read-only.

added global appendable Flags (#12) #26

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 89 additions & 0 deletions cmd/flags.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
// Copyright 2019 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package cmd

import (
"log"
root360-AndreasUlm marked this conversation as resolved.
Show resolved Hide resolved

"github.com/urfave/cli"
)

// create global variables for global Flags to simplify
// access to the options without requiring cli.Context
var (
loginValue string
repoValue string
outputValue string
)

// LoginFlag provides flag to specify tea login profile
var LoginFlag = cli.StringFlag{
Name: "login, l",
Usage: "Indicate one login, optional when inside a gitea repository",
Destination: &loginValue,
}

// RepoFlag provides flag to specify repository
var RepoFlag = cli.StringFlag{
Name: "repo, r",
Usage: "Indicate one repository, optional when inside a gitea repository",
Destination: &repoValue,
}

// OutputFlag provides flag to specify output type
var OutputFlag = cli.StringFlag{
Name: "output, o",
Usage: "Specify output format. (csv, simple, table, tsv, yaml)",
Destination: &outputValue,
}

// DefaultFlags defines flags that should be available
// for all subcommands and appended to the flags of the
// subcommand to work around issue:
// https://github.com/urfave/cli/issues/585
var DefaultFlags = []cli.Flag{
LoginFlag,
OutputFlag,
}

// RepoDefaultFlags defines flags that should be available
// for all subcommands working with dedicated repositories
// to work around issue:
// https://github.com/urfave/cli/issues/585
var RepoDefaultFlags = append([]cli.Flag{
RepoFlag,
}, DefaultFlags...)

// initCommand returns repository and *Login based on flags
func initCommand() (*Login, string, string) {
err := loadConfig(yamlConfigPath)
if err != nil {
log.Fatal("load config file failed ", yamlConfigPath)
}

var login *Login
if loginValue == "" {
login, err = getActiveLogin()
if err != nil {
log.Fatal(err)
}
} else {
login = getLoginByName(loginValue)
if login == nil {
log.Fatal("indicated login name ", loginValue, " does not exist")
}
}

repoPath := repoValue
if repoPath == "" {
login, repoPath, err = curGitRepoPath()
if err != nil {
log.Fatal(err.Error())
}
}

owner, repo := splitRepo(repoPath)
return login, owner, repo
}
60 changes: 6 additions & 54 deletions cmd/issues.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,7 @@ var CmdIssues = cli.Command{
CmdIssuesList,
CmdIssuesCreate,
},
Flags: []cli.Flag{
cli.StringFlag{
Name: "login, l",
Usage: "Indicate one login, optional when inside a gitea repository",
},
cli.StringFlag{
Name: "repo, r",
Usage: "Indicate one repository, optional when inside a gitea repository",
},
},
Flags: RepoDefaultFlags,
}

// CmdIssuesList represents a sub command of issues to list issues
Expand All @@ -54,7 +45,7 @@ func runIssues(ctx *cli.Context) error {
}

func runIssueDetail(ctx *cli.Context, index string) error {
login, owner, repo := initCommand(ctx)
login, owner, repo := initCommand()

if strings.HasPrefix(index, "#") {
index = index[1:]
Expand All @@ -80,7 +71,7 @@ func runIssueDetail(ctx *cli.Context, index string) error {
}

func runIssuesList(ctx *cli.Context) error {
login, owner, repo := initCommand(ctx)
login, owner, repo := initCommand()

issues, err := login.Client().ListRepoIssues(owner, repo, gitea.ListIssueOption{
Page: 0,
Expand Down Expand Up @@ -113,7 +104,7 @@ var CmdIssuesCreate = cli.Command{
Usage: "Create an issue on repository",
Description: `Create an issue on repository`,
Action: runIssuesCreate,
Flags: []cli.Flag{
Flags: append([]cli.Flag{
cli.StringFlag{
Name: "title, t",
Usage: "issue title to create",
Expand All @@ -122,50 +113,11 @@ var CmdIssuesCreate = cli.Command{
Name: "body, b",
Usage: "issue body to create",
},
},
}

func initCommand(ctx *cli.Context) (*Login, string, string) {
err := loadConfig(yamlConfigPath)
if err != nil {
log.Fatal("load config file failed", yamlConfigPath)
}

var login *Login
if loginFlag := getGlobalFlag(ctx, "login"); loginFlag == "" {
login, err = getActiveLogin()
if err != nil {
log.Fatal(err)
}
} else {
login = getLoginByName(loginFlag)
if login == nil {
log.Fatal("indicated login name", loginFlag, "does not exist")
}
}

repoPath := getGlobalFlag(ctx, "repo")
if repoPath == "" {
login, repoPath, err = curGitRepoPath()
if err != nil {
log.Fatal(err.Error())
}
}

owner, repo := splitRepo(repoPath)
return login, owner, repo
}

func getGlobalFlag(ctx *cli.Context, flag string) string {
var val = ctx.String(flag)
if val == "" {
return ctx.GlobalString(flag)
}
return val
}, RepoDefaultFlags...),
}

func runIssuesCreate(ctx *cli.Context) error {
login, owner, repo := initCommand(ctx)
login, owner, repo := initCommand()

_, err := login.Client().CreateIssue(owner, repo, gitea.CreateIssueOption{
Title: ctx.String("title"),
Expand Down
13 changes: 2 additions & 11 deletions cmd/pulls.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,11 @@ var CmdPulls = cli.Command{
Usage: "Operate with pulls of the repository",
Description: `Operate with pulls of the repository`,
Action: runPulls,
Flags: []cli.Flag{
cli.StringFlag{
Name: "login, l",
Usage: "Indicate one login, optional when inside a gitea repository",
},
cli.StringFlag{
Name: "repo, r",
Usage: "Indicate one repository, optional when inside a gitea repository",
},
},
Flags: RepoDefaultFlags,
}

func runPulls(ctx *cli.Context) error {
login, owner, repo := initCommand(ctx)
login, owner, repo := initCommand()

prs, err := login.Client().ListRepoPullRequests(owner, repo, gitea.ListPullRequestsOptions{
Page: 0,
Expand Down
19 changes: 5 additions & 14 deletions cmd/releases.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,11 @@ var CmdReleases = cli.Command{
Subcommands: []cli.Command{
CmdReleaseCreate,
},
Flags: []cli.Flag{
cli.StringFlag{
Name: "login, l",
Usage: "Indicate one login, optional when inside a gitea repository",
},
cli.StringFlag{
Name: "repo, r",
Usage: "Indicate one repository, optional when inside a gitea repository",
},
},
Flags: append([]cli.Flag{}, RepoDefaultFlags...),
}

func runReleases(ctx *cli.Context) error {
login, owner, repo := initCommand(ctx)
login, owner, repo := initCommand()

releases, err := login.Client().ListReleases(owner, repo)
if err != nil {
Expand Down Expand Up @@ -65,7 +56,7 @@ var CmdReleaseCreate = cli.Command{
Usage: "Create a release in repository",
Description: `Create a release in repository`,
Action: runReleaseCreate,
Flags: []cli.Flag{
Flags: append([]cli.Flag{
cli.StringFlag{
Name: "tag",
Usage: "release tag name",
Expand Down Expand Up @@ -94,11 +85,11 @@ var CmdReleaseCreate = cli.Command{
Name: "asset, a",
Usage: "a list of files to attach to the release",
},
},
}, RepoDefaultFlags...),
}

func runReleaseCreate(ctx *cli.Context) error {
login, owner, repo := initCommand(ctx)
login, owner, repo := initCommand()

release, err := login.Client().CreateRelease(owner, repo, gitea.CreateReleaseOption{
TagName: ctx.String("tag"),
Expand Down