isolate credits

This commit is contained in:
vilmibm 2020-07-27 13:56:15 -05:00
parent bccc93a491
commit 9359dcaf80
3 changed files with 124 additions and 97 deletions

View file

@ -5,11 +5,6 @@ import (
"github.com/spf13/cobra"
)
func init() {
repoCmd.AddCommand(repoCreditsCmd)
repoCreditsCmd.Flags().BoolP("static", "s", false, "Print a static version of the credits")
}
var repoCmd = &cobra.Command{
Use: "repo <command>",
Short: "Create, clone, fork, and view repositories",
@ -26,28 +21,3 @@ A repository can be supplied as an argument in any of the following formats:
- "OWNER/REPO"
- by URL, e.g. "https://github.com/OWNER/REPO"`},
}
var repoCreditsCmd = &cobra.Command{
Use: "credits [<repository>]",
Short: "View credits for a repository",
Example: heredoc.Doc(`
# view credits for the current repository
$ gh repo credits
# view credits for a specific repository
$ gh repo credits cool/repo
# print a non-animated thank you
$ gh repo credits -s
# pipe to just print the contributors, one per line
$ gh repo credits | cat
`),
Args: cobra.MaximumNArgs(1),
RunE: repoCredits,
Hidden: true,
}
func repoCredits(cmd *cobra.Command, args []string) error {
return credits(cmd, args)
}

View file

@ -23,6 +23,7 @@ import (
gistCreateCmd "github.com/cli/cli/pkg/cmd/gist/create"
repoCloneCmd "github.com/cli/cli/pkg/cmd/repo/clone"
repoCreateCmd "github.com/cli/cli/pkg/cmd/repo/create"
creditsCmd "github.com/cli/cli/pkg/cmd/repo/credits"
repoForkCmd "github.com/cli/cli/pkg/cmd/repo/fork"
repoViewCmd "github.com/cli/cli/pkg/cmd/repo/view"
"github.com/cli/cli/pkg/cmdutil"
@ -156,6 +157,9 @@ func init() {
repoCmd.AddCommand(repoForkCmd.NewCmdFork(&repoResolvingCmdFactory, nil))
repoCmd.AddCommand(repoCloneCmd.NewCmdClone(cmdFactory, nil))
repoCmd.AddCommand(repoCreateCmd.NewCmdCreate(cmdFactory, nil))
repoCmd.AddCommand(creditsCmd.NewCmdRepoCredits(&repoResolvingCmdFactory, nil))
RootCmd.AddCommand(creditsCmd.NewCmdCredits(cmdFactory, nil))
}
// RootCmd is the entry point of command-line execution

View file

@ -1,10 +1,11 @@
package command
package credits
import (
"bytes"
"fmt"
"math"
"math/rand"
"net/http"
"os"
"os/exec"
"runtime"
@ -12,72 +13,118 @@ import (
"time"
"github.com/MakeNowJust/heredoc"
"github.com/spf13/cobra"
"golang.org/x/crypto/ssh/terminal"
"github.com/cli/cli/api"
"github.com/cli/cli/internal/ghrepo"
"github.com/cli/cli/pkg/cmdutil"
"github.com/cli/cli/pkg/iostreams"
"github.com/cli/cli/utils"
"github.com/spf13/cobra"
)
var thankYou = `
_ _
| | | |
_|_ | | __, _ _ | | __
| |/ \ / | / |/ | |/_) | | / \_| |
|_/| |_/\_/|_/ | |_/| \_/ \_/|/\__/ \_/|_/
/|
\|
_
o | | |
__ __ _ _ _|_ ,_ | | _|_ __ ,_ , |
/ / \_/ |/ | | / | | |/ \_| | | / \_/ | / \_|
\___/\__/ | |_/|_/ |_/|_/\_/ \_/|_/|_/\__/ |_/ \/ o
type CreditsOptions struct {
HttpClient func() (*http.Client, error)
BaseRepo func() (ghrepo.Interface, error)
IO *iostreams.IOStreams
`
func init() {
RootCmd.AddCommand(creditsCmd)
creditsCmd.Flags().BoolP("static", "s", false, "Print a static version of the credits")
Repository string
Static bool
}
var creditsCmd = &cobra.Command{
Use: "credits",
Short: "View credits for this tool",
Long: `View animated credits for gh, the tool you are currently using :)`,
Example: heredoc.Doc(`
# see a credits animation for this project
$ gh credits
# display a non-animated thank you
$ gh credits -s
# just print the contributors, one per line
$ gh credits | cat
`),
Args: cobra.ExactArgs(0),
RunE: ghCredits,
Hidden: true,
func NewCmdCredits(f *cmdutil.Factory, runF func(*CreditsOptions) error) *cobra.Command {
opts := &CreditsOptions{
HttpClient: f.HttpClient,
IO: f.IOStreams,
BaseRepo: f.BaseRepo,
Repository: "cli/cli",
}
cmd := &cobra.Command{
Use: "credits",
Short: "View credits for this tool",
Long: `View animated credits for gh, the tool you are currently using :)`,
Example: heredoc.Doc(`
# see a credits animation for this project
$ gh credits
# display a non-animated thank you
$ gh credits -s
# just print the contributors, one per line
$ gh credits | cat
`),
Args: cobra.ExactArgs(0),
RunE: func(cmd *cobra.Command, args []string) error {
if runF != nil {
return runF(opts)
}
return creditsRun(opts)
},
Hidden: true,
}
cmd.Flags().BoolVarP(&opts.Static, "static", "s", false, "Print a static version of the credits")
return cmd
}
func ghCredits(cmd *cobra.Command, _ []string) error {
args := []string{"cli/cli"}
return credits(cmd, args)
func NewCmdRepoCredits(f *cmdutil.Factory, runF func(*CreditsOptions) error) *cobra.Command {
opts := &CreditsOptions{
HttpClient: f.HttpClient,
BaseRepo: f.BaseRepo,
IO: f.IOStreams,
}
cmd := &cobra.Command{
Use: "credits [<repository>]",
Short: "View credits for a repository",
Example: heredoc.Doc(`
# view credits for the current repository
$ gh repo credits
# view credits for a specific repository
$ gh repo credits cool/repo
# print a non-animated thank you
$ gh repo credits -s
# pipe to just print the contributors, one per line
$ gh repo credits | cat
`),
Args: cobra.MaximumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) > 0 {
opts.Repository = args[0]
}
if runF != nil {
return runF(opts)
}
return creditsRun(opts)
},
Hidden: true,
}
cmd.Flags().BoolVarP(&opts.Static, "static", "s", false, "Print a static version of the credits")
return cmd
}
func credits(cmd *cobra.Command, args []string) error {
func creditsRun(opts *CreditsOptions) error {
isWindows := runtime.GOOS == "windows"
ctx := contextForCommand(cmd)
client, err := apiClientForContext(ctx)
httpClient, err := opts.HttpClient()
if err != nil {
return err
}
client := api.NewClientFromHTTP(httpClient)
var owner string
var repo string
if len(args) == 0 {
baseRepo, err := determineBaseRepo(client, cmd, ctx)
if opts.Repository == "" {
baseRepo, err := opts.BaseRepo()
if err != nil {
return err
}
@ -85,7 +132,7 @@ func credits(cmd *cobra.Command, args []string) error {
owner = baseRepo.RepoOwner()
repo = baseRepo.RepoName()
} else {
parts := strings.SplitN(args[0], "/", 2)
parts := strings.SplitN(opts.Repository, "/", 2)
owner = parts[0]
repo = parts[1]
}
@ -105,27 +152,15 @@ func credits(cmd *cobra.Command, args []string) error {
return err
}
out := cmd.OutOrStdout()
isTTY := false
outFile, isFile := out.(*os.File)
if isFile {
isTTY = utils.IsTerminal(outFile)
if isTTY {
// FIXME: duplicates colorableOut
out = utils.NewColorable(outFile)
}
}
isTTY := opts.IO.IsStdoutTTY()
static, err := cmd.Flags().GetBool("static")
if err != nil {
return err
}
static := opts.Static || isWindows
static = static || isWindows
out := opts.IO.Out
if isTTY && static {
fmt.Fprintln(out, "THANK YOU CONTRIBUTORS!!! <3")
fmt.Println()
fmt.Fprintln(out, "")
}
logins := []string{}
@ -153,7 +188,8 @@ func credits(cmd *cobra.Command, args []string) error {
lines = append(lines, logins...)
lines = append(lines, "( <3 press ctrl-c to quit <3 )")
termWidth, termHeight, err := terminal.GetSize(int(outFile.Fd()))
termWidth, termHeight, err := utils.TerminalSize(out)
//termWidth, termHeight, err := terminal.GetSize(int(outFile.Fd()))
if err != nil {
return err
}
@ -262,3 +298,20 @@ func clear() {
cmd.Stdout = os.Stdout
_ = cmd.Run()
}
var thankYou = `
_ _
| | | |
_|_ | | __, _ _ | | __
| |/ \ / | / |/ | |/_) | | / \_| |
|_/| |_/\_/|_/ | |_/| \_/ \_/|/\__/ \_/|_/
/|
\|
_
o | | |
__ __ _ _ _|_ ,_ | | _|_ __ ,_ , |
/ / \_/ |/ | | / | | |/ \_| | | / \_/ | / \_|
\___/\__/ | |_/|_/ |_/|_/\_/ \_/|_/|_/\__/ |_/ \/ o
`