提交 04e2d43b 编写于 作者: J Jingwen Owen Ou

Merge pull request jingweno/gh:116 from jingweno/remote_compat

Remote is compatible with Hub
package commands
import (
"fmt"
"github.com/jingweno/gh/github"
"github.com/jingweno/gh/utils"
"regexp"
)
var cmdRemote = &Command{
......@@ -29,36 +31,51 @@ then uses your GitHub login.
> git remote add origin git://github.com/YOUR_LOGIN/THIS_REPO.git
*/
func remote(command *Command, args *Args) {
if args.ParamsSize() >= 2 && (args.FirstParam() == "add" || args.FirstParam() == "set-url") {
if !args.IsParamsEmpty() && (args.FirstParam() == "add" || args.FirstParam() == "set-url") {
transformRemoteArgs(args)
}
}
func transformRemoteArgs(args *Args) {
ownerWithName := args.LastParam()
owner, name, match := parseRepoNameOwner(ownerWithName)
if !match {
owner, name := parseRepoNameOwner(ownerWithName)
if owner == "" {
return
}
var err error
localRepo := github.LocalRepo()
var repoName string
if name == "" {
name, err = utils.DirName()
utils.Check(err)
project, err := localRepo.MainProject()
if err == nil {
repoName = project.Name
} else {
repoName, err = utils.DirName()
utils.Check(err)
}
name = repoName
}
words := args.Words()
isPriavte := parseRemotePrivateFlag(args)
if owner == "origin" {
owner = github.CurrentConfig().FetchUser()
} else if args.ParamsSize() > 2 {
// `git remote add jingweno foo/bar`
if len(words) == 2 && words[1] == "origin" {
// gh add origin
credentials := github.CurrentConfigs().DefaultCredentials()
owner = credentials.User
name = repoName
} else if len(words) == 2 {
// gh remote add jingweno foo/bar
if idx := args.IndexOfParam(words[1]); idx != -1 {
args.ReplaceParam(idx, owner)
}
} else {
args.RemoveParam(args.ParamsSize() - 1)
}
project := github.NewProject(owner, name, "")
// for GitHub Enterprise
isPriavte = isPriavte || project.Host != github.GitHubHost
url := project.GitURL(name, owner, isPriavte)
args.AppendParams(url)
}
......@@ -70,3 +87,22 @@ func parseRemotePrivateFlag(args *Args) bool {
return false
}
func parseRepoNameOwner(nameWithOwner string) (owner, name string) {
ownerRe := fmt.Sprintf("^(%s)$", OwnerRe)
ownerRegexp := regexp.MustCompile(ownerRe)
if ownerRegexp.MatchString(nameWithOwner) {
owner = ownerRegexp.FindStringSubmatch(nameWithOwner)[1]
return
}
nameWithOwnerRe := fmt.Sprintf("^(%s)\\/(%s)$", OwnerRe, NameRe)
nameWithOwnerRegexp := regexp.MustCompile(nameWithOwnerRe)
if nameWithOwnerRegexp.MatchString(nameWithOwner) {
result := nameWithOwnerRegexp.FindStringSubmatch(nameWithOwner)
owner = result[1]
name = result[2]
}
return
}
......@@ -8,8 +8,20 @@ import (
"testing"
)
func TestParseRepoNameOwner(t *testing.T) {
owner, repo := parseRepoNameOwner("jingweno")
assert.Equal(t, "jingweno", owner)
assert.Equal(t, "", repo)
owner, repo = parseRepoNameOwner("jingweno/gh")
assert.Equal(t, "jingweno", owner)
assert.Equal(t, "gh", repo)
}
func TestTransformRemoteArgs(t *testing.T) {
os.Setenv("GH_PROTOCOL", "git")
github.CreateTestConfigs("jingweno", "123")
args := NewArgs([]string{"remote", "add", "jingweno"})
transformRemoteArgs(args)
......@@ -28,8 +40,6 @@ func TestTransformRemoteArgs(t *testing.T) {
reg = regexp.MustCompile("^git@github.com:jingweno/.+\\.git$")
assert.T(t, reg.MatchString(args.GetParam(2)))
github.CreateTestConfig("jingweno", "123")
args = NewArgs([]string{"remote", "add", "origin"})
transformRemoteArgs(args)
......
package commands
import (
"fmt"
"github.com/jingweno/gh/git"
"github.com/jingweno/gh/utils"
"github.com/jingweno/go-octokit/octokit"
"os"
"regexp"
"strings"
)
......@@ -37,27 +35,6 @@ func parseUserBranchFromPR(pullRequest *octokit.PullRequest) (user string, branc
return
}
func parseRepoNameOwner(nameWithOwner string) (owner, name string, match bool) {
ownerRe := fmt.Sprintf("^(%s)$", OwnerRe)
ownerRegexp := regexp.MustCompile(ownerRe)
if ownerRegexp.MatchString(nameWithOwner) {
owner = ownerRegexp.FindStringSubmatch(nameWithOwner)[1]
match = true
return
}
nameWithOwnerRe := fmt.Sprintf("^(%s)\\/(%s)$", OwnerRe, NameRe)
nameWithOwnerRegexp := regexp.MustCompile(nameWithOwnerRe)
if nameWithOwnerRegexp.MatchString(nameWithOwner) {
result := nameWithOwnerRegexp.FindStringSubmatch(nameWithOwner)
owner = result[1]
name = result[2]
match = true
}
return
}
func hasGitRemote(name string) bool {
remotes, err := git.Remotes()
utils.Check(err)
......
package commands
import (
"github.com/bmizerany/assert"
"testing"
)
func TestParseRepoNameOwner(t *testing.T) {
owner, repo, match := parseRepoNameOwner("jingweno")
assert.T(t, match)
assert.Equal(t, "jingweno", owner)
assert.Equal(t, "", repo)
owner, repo, match = parseRepoNameOwner("jingweno/gh")
assert.T(t, match)
assert.Equal(t, "jingweno", owner)
assert.Equal(t, "gh", repo)
}
......@@ -161,7 +161,7 @@ func NewProject(owner, name, host string) *Project {
}
if host == "" {
host = GitHubHost
host = defaultHost()
}
if owner == "" {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册