Don't exit if we can't find a local repo with a remote matching to a login (#336)
This enables to run commands that need minimal context (i.e. `tea n --all`) to run anywhere. fixes #329 Co-authored-by: Norwin Roosen <git@nroo.de> Reviewed-on: https://gitea.com/gitea/tea/pulls/336 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: 6543 <6543@obermui.de> Co-authored-by: Norwin <noerw@noreply.gitea.io> Co-committed-by: Norwin <noerw@noreply.gitea.io>
This commit is contained in:
parent
e96cfdbbe7
commit
15c4edba1a
|
@ -20,15 +20,19 @@ import (
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
errNotAGiteaRepo = errors.New("No Gitea login found. You might want to specify --repo (and --login) to work outside of a repository")
|
||||||
|
)
|
||||||
|
|
||||||
// TeaContext contains all context derived during command initialization and wraps cli.Context
|
// TeaContext contains all context derived during command initialization and wraps cli.Context
|
||||||
type TeaContext struct {
|
type TeaContext struct {
|
||||||
*cli.Context
|
*cli.Context
|
||||||
Login *config.Login
|
Login *config.Login // config data & client for selected login
|
||||||
RepoSlug string // <owner>/<repo>
|
RepoSlug string // <owner>/<repo>, optional
|
||||||
Owner string // repo owner as derived from context
|
Owner string // repo owner as derived from context or provided in flag, optional
|
||||||
Repo string // repo name as derived from context or provided in flag
|
Repo string // repo name as derived from context or provided in flag, optional
|
||||||
Output string // value of output flag
|
Output string // value of output flag
|
||||||
LocalRepo *git.TeaRepo // maybe, we have opened it already anyway
|
LocalRepo *git.TeaRepo // is set if flags specified a local repo via --repo, or if $PWD is a git repo
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetListOptions return ListOptions based on PaginationFlags
|
// GetListOptions return ListOptions based on PaginationFlags
|
||||||
|
@ -84,8 +88,7 @@ func InitCommand(ctx *cli.Context) *TeaContext {
|
||||||
|
|
||||||
// check if repoFlag can be interpreted as path to local repo.
|
// check if repoFlag can be interpreted as path to local repo.
|
||||||
if len(repoFlag) != 0 {
|
if len(repoFlag) != 0 {
|
||||||
repoFlagPathExists, err = utils.DirExists(repoFlag)
|
if repoFlagPathExists, err = utils.DirExists(repoFlag); err != nil {
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err.Error())
|
log.Fatal(err.Error())
|
||||||
}
|
}
|
||||||
if repoFlagPathExists {
|
if repoFlagPathExists {
|
||||||
|
@ -95,9 +98,12 @@ func InitCommand(ctx *cli.Context) *TeaContext {
|
||||||
|
|
||||||
if len(repoFlag) == 0 || repoFlagPathExists {
|
if len(repoFlag) == 0 || repoFlagPathExists {
|
||||||
// try to read git repo & extract context, ignoring if PWD is not a repo
|
// try to read git repo & extract context, ignoring if PWD is not a repo
|
||||||
c.LocalRepo, c.Login, c.RepoSlug, err = contextFromLocalRepo(repoPath, remoteFlag)
|
if c.LocalRepo, c.Login, c.RepoSlug, err = contextFromLocalRepo(repoPath, remoteFlag); err != nil {
|
||||||
if err != nil && err != gogit.ErrRepositoryNotExists {
|
if err == errNotAGiteaRepo || err == gogit.ErrRepositoryNotExists {
|
||||||
log.Fatal(err.Error())
|
// we can deal with that, commands needing the optional values use ctx.Ensure()
|
||||||
|
} else {
|
||||||
|
log.Fatal(err.Error())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,5 +193,5 @@ func contextFromLocalRepo(repoPath, remoteValue string) (*git.TeaRepo, *config.L
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return repo, nil, "", errors.New("No Gitea login found. You might want to specify --repo (and --login) to work outside of a repository")
|
return repo, nil, "", errNotAGiteaRepo
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue