Merge remote-tracking branch 'origin' into go-module-v2
This commit is contained in:
commit
e0fa56dc29
10 changed files with 82 additions and 72 deletions
|
|
@ -56,8 +56,5 @@ func actionsExplainer(cs *iostreams.ColorScheme) string {
|
|||
gh workflow run: Trigger a workflow_dispatch run for a workflow file
|
||||
|
||||
To see more help, run 'gh help workflow <subcommand>'
|
||||
|
||||
For more in depth help including examples, see online documentation at:
|
||||
<https://docs.github.com/en/actions/guides/managing-github-actions-with-github-cli>
|
||||
`, header, runHeader, workflowHeader)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -169,12 +169,28 @@ func parseFileArg(fileArg string) (string, error) {
|
|||
if len(arr) > 2 {
|
||||
return "", fmt.Errorf("invalid use of colon\nUse 'gh browse --help' for more information about browse\n")
|
||||
}
|
||||
|
||||
if len(arr) > 1 {
|
||||
if !isNumber(arr[1]) {
|
||||
return "", fmt.Errorf("invalid line number after colon\nUse 'gh browse --help' for more information about browse\n")
|
||||
out := arr[0] + "#L"
|
||||
lineRange := strings.Split(arr[1], "-")
|
||||
|
||||
if len(lineRange) > 0 {
|
||||
if !isNumber(lineRange[0]) {
|
||||
return "", fmt.Errorf("invalid line number after colon\nUse 'gh browse --help' for more information about browse\n")
|
||||
}
|
||||
out += lineRange[0]
|
||||
}
|
||||
return arr[0] + "#L" + arr[1], nil
|
||||
|
||||
if len(lineRange) > 1 {
|
||||
if !isNumber(lineRange[1]) {
|
||||
return "", fmt.Errorf("invalid line range after colon\nUse 'gh browse --help' for more information about browse\n")
|
||||
}
|
||||
out += "-L" + lineRange[1]
|
||||
}
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
return arr[0], nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -215,6 +215,15 @@ func Test_runBrowse(t *testing.T) {
|
|||
defaultBranch: "trunk",
|
||||
expectedURL: "https://github.com/ravocean/angur/tree/trunk/path/to/file.txt#L32",
|
||||
},
|
||||
{
|
||||
name: "file with line range",
|
||||
opts: BrowseOptions{
|
||||
SelectorArg: "path/to/file.txt:32-40",
|
||||
},
|
||||
baseRepo: ghrepo.New("ravocean", "angur"),
|
||||
defaultBranch: "trunk",
|
||||
expectedURL: "https://github.com/ravocean/angur/tree/trunk/path/to/file.txt#L32-L40",
|
||||
},
|
||||
{
|
||||
name: "file with invalid line number",
|
||||
opts: BrowseOptions{
|
||||
|
|
@ -223,6 +232,14 @@ func Test_runBrowse(t *testing.T) {
|
|||
baseRepo: ghrepo.New("ttran112", "ttrain211"),
|
||||
wantsErr: true,
|
||||
},
|
||||
{
|
||||
name: "file with invalid line range",
|
||||
opts: BrowseOptions{
|
||||
SelectorArg: "path/to/file.txt:32-abc",
|
||||
},
|
||||
baseRepo: ghrepo.New("ttran112", "ttrain211"),
|
||||
wantsErr: true,
|
||||
},
|
||||
{
|
||||
name: "branch with issue number",
|
||||
opts: BrowseOptions{
|
||||
|
|
|
|||
|
|
@ -268,7 +268,7 @@ func (m *Manager) Create(name string) error {
|
|||
}
|
||||
|
||||
fileTmpl := heredoc.Docf(`
|
||||
#!/bin/bash
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
echo "Hello %[1]s!"
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ func NewCmdCreate(f *cmdutil.Factory, runF func(*CreateOptions) error) *cobra.Co
|
|||
$ gh issue create --label "bug,help wanted"
|
||||
$ gh issue create --label bug --label "help wanted"
|
||||
$ gh issue create --assignee monalisa,hubot
|
||||
$ gh issue create --assignee @me
|
||||
$ gh issue create --assignee "@me"
|
||||
$ gh issue create --project "Roadmap"
|
||||
`),
|
||||
Args: cmdutil.NoArgsQuoteReminder,
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ func NewCmdEdit(f *cmdutil.Factory, runF func(*EditOptions) error) *cobra.Comman
|
|||
Example: heredoc.Doc(`
|
||||
$ gh issue edit 23 --title "I found a bug" --body "Nothing works"
|
||||
$ gh issue edit 23 --add-label "bug,help wanted" --remove-label "core"
|
||||
$ gh issue edit 23 --add-assignee @me --remove-assignee monalisa,hubot
|
||||
$ gh issue edit 23 --add-assignee "@me" --remove-assignee monalisa,hubot
|
||||
$ gh issue edit 23 --add-project "Roadmap" --remove-project v1,v2
|
||||
$ gh issue edit 23 --milestone "Version 1"
|
||||
$ gh issue edit 23 --body-file body.txt
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ func NewCmdList(f *cmdutil.Factory, runF func(*ListOptions) error) *cobra.Comman
|
|||
Example: heredoc.Doc(`
|
||||
$ gh issue list -l "bug" -l "help wanted"
|
||||
$ gh issue list -A monalisa
|
||||
$ gh issue list -a @me
|
||||
$ gh issue list -a "@me"
|
||||
$ gh issue list --web
|
||||
$ gh issue list --milestone "The big 1.0"
|
||||
$ gh issue list --search "error no:assignee sort:created-asc"
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ func NewCmdEdit(f *cmdutil.Factory, runF func(*EditOptions) error) *cobra.Comman
|
|||
$ gh pr edit 23 --title "I found a bug" --body "Nothing works"
|
||||
$ gh pr edit 23 --add-label "bug,help wanted" --remove-label "core"
|
||||
$ gh pr edit 23 --add-reviewer monalisa,hubot --remove-reviewer myorg/team-name
|
||||
$ gh pr edit 23 --add-assignee @me --remove-assignee monalisa,hubot
|
||||
$ gh pr edit 23 --add-assignee "@me" --remove-assignee monalisa,hubot
|
||||
$ gh pr edit 23 --add-project "Roadmap" --remove-project v1,v2
|
||||
$ gh pr edit 23 --milestone "Version 1"
|
||||
`),
|
||||
|
|
|
|||
|
|
@ -51,10 +51,10 @@ func NewCmdList(f *cmdutil.Factory, runF func(*ListOptions) error) *cobra.Comman
|
|||
Short: "List and filter pull requests in this repository",
|
||||
Example: heredoc.Doc(`
|
||||
List PRs authored by you
|
||||
$ gh pr list --author @me
|
||||
$ gh pr list --author "@me"
|
||||
|
||||
List PRs assigned to you
|
||||
$ gh pr list --assignee @me
|
||||
$ gh pr list --assignee "@me"
|
||||
|
||||
List PRs by label, combining multiple labels with AND
|
||||
$ gh pr list --label bug --label "priority 1"
|
||||
|
|
|
|||
|
|
@ -8,11 +8,9 @@ import (
|
|||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/signal"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
|
||||
"github.com/cli/cli/v2/api"
|
||||
"github.com/cli/cli/v2/internal/ghinstance"
|
||||
|
|
@ -21,6 +19,7 @@ import (
|
|||
"github.com/cli/cli/v2/pkg/iostreams"
|
||||
"github.com/cli/cli/v2/utils"
|
||||
"github.com/spf13/cobra"
|
||||
"golang.org/x/term"
|
||||
)
|
||||
|
||||
type Geometry struct {
|
||||
|
|
@ -51,10 +50,11 @@ type Cell struct {
|
|||
}
|
||||
|
||||
const (
|
||||
DirUp = iota
|
||||
DirUp Direction = iota
|
||||
DirDown
|
||||
DirLeft
|
||||
DirRight
|
||||
Quit
|
||||
)
|
||||
|
||||
type Direction = int
|
||||
|
|
@ -182,18 +182,6 @@ func gardenRun(opts *GardenOptions) error {
|
|||
|
||||
maxCommits := (geo.Width * geo.Height) / 2
|
||||
|
||||
sttyFileArg := "-F"
|
||||
if runtime.GOOS == "darwin" {
|
||||
sttyFileArg = "-f"
|
||||
}
|
||||
|
||||
oldTTYCommand := exec.Command("stty", sttyFileArg, "/dev/tty", "-g")
|
||||
oldTTYSettings, err := oldTTYCommand.CombinedOutput()
|
||||
if err != nil {
|
||||
fmt.Fprintln(out, "getting TTY settings failed:", string(oldTTYSettings))
|
||||
return err
|
||||
}
|
||||
|
||||
opts.IO.StartProgressIndicator()
|
||||
fmt.Fprintln(out, "gathering commits; this could take a minute...")
|
||||
commits, err := getCommits(httpClient, toView, maxCommits)
|
||||
|
|
@ -215,57 +203,42 @@ func gardenRun(opts *GardenOptions) error {
|
|||
clear(opts.IO)
|
||||
drawGarden(opts.IO, garden, player)
|
||||
|
||||
// thanks stackoverflow https://stackoverflow.com/a/17278776
|
||||
_ = exec.Command("stty", sttyFileArg, "/dev/tty", "cbreak", "min", "1").Run()
|
||||
_ = exec.Command("stty", sttyFileArg, "/dev/tty", "-echo").Run()
|
||||
|
||||
walkAway := func() {
|
||||
clear(opts.IO)
|
||||
fmt.Fprint(out, "\033[?25h")
|
||||
_ = exec.Command("stty", sttyFileArg, "/dev/tty", strings.TrimSpace(string(oldTTYSettings))).Run()
|
||||
fmt.Fprintln(out)
|
||||
fmt.Fprintln(out, cs.Bold("You turn and walk away from the wildflower garden..."))
|
||||
// TODO: use opts.IO instead of os.Stdout
|
||||
oldTermState, err := term.MakeRaw(int(os.Stdout.Fd()))
|
||||
if err != nil {
|
||||
return fmt.Errorf("term.MakeRaw: %w", err)
|
||||
}
|
||||
|
||||
c := make(chan os.Signal)
|
||||
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
|
||||
dirc := make(chan Direction)
|
||||
go func() {
|
||||
<-c
|
||||
walkAway()
|
||||
os.Exit(0)
|
||||
b := make([]byte, 3)
|
||||
for {
|
||||
_, _ = opts.IO.In.Read(b)
|
||||
switch {
|
||||
case isLeft(b):
|
||||
dirc <- DirLeft
|
||||
case isRight(b):
|
||||
dirc <- DirRight
|
||||
case isUp(b):
|
||||
dirc <- DirUp
|
||||
case isDown(b):
|
||||
dirc <- DirDown
|
||||
case isQuit(b):
|
||||
dirc <- Quit
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
var b []byte = make([]byte, 3)
|
||||
mainLoop:
|
||||
for {
|
||||
_, _ = opts.IO.In.Read(b)
|
||||
|
||||
oldX := player.X
|
||||
oldY := player.Y
|
||||
moved := false
|
||||
quitting := false
|
||||
continuing := false
|
||||
|
||||
switch {
|
||||
case isLeft(b):
|
||||
moved = player.move(DirLeft)
|
||||
case isRight(b):
|
||||
moved = player.move(DirRight)
|
||||
case isUp(b):
|
||||
moved = player.move(DirUp)
|
||||
case isDown(b):
|
||||
moved = player.move(DirDown)
|
||||
case isQuit(b):
|
||||
quitting = true
|
||||
default:
|
||||
continuing = true
|
||||
}
|
||||
|
||||
if quitting {
|
||||
break
|
||||
}
|
||||
|
||||
if !moved || continuing {
|
||||
continue
|
||||
d := <-dirc
|
||||
if d == Quit {
|
||||
break mainLoop
|
||||
} else if !player.move(d) {
|
||||
continue mainLoop
|
||||
}
|
||||
|
||||
underPlayer := garden[player.Y][player.X]
|
||||
|
|
@ -315,7 +288,12 @@ func gardenRun(opts *GardenOptions) error {
|
|||
fmt.Fprint(out, cs.Bold(sl))
|
||||
}
|
||||
|
||||
walkAway()
|
||||
clear(opts.IO)
|
||||
fmt.Fprint(out, "\033[?25h")
|
||||
// TODO: use opts.IO instead of os.Stdout
|
||||
_ = term.Restore(int(os.Stdout.Fd()), oldTermState)
|
||||
fmt.Fprintln(out, cs.Bold("You turn and walk away from the wildflower garden..."))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -343,8 +321,10 @@ func isUp(b []byte) bool {
|
|||
return bytes.EqualFold(b, up) || r == 'w' || r == 'k'
|
||||
}
|
||||
|
||||
var ctrlC = []byte{0x3, 0x5b, 0x43}
|
||||
|
||||
func isQuit(b []byte) bool {
|
||||
return rune(b[0]) == 'q'
|
||||
return rune(b[0]) == 'q' || bytes.Equal(b, ctrlC)
|
||||
}
|
||||
|
||||
func plantGarden(commits []*Commit, geo *Geometry) [][]*Cell {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue