未验证 提交 31e91cdc 编写于 作者: M Mislav Marohnić 提交者: GitHub

Merge pull request #1988 from github/create-unrelated-origin

Improve `hub create` dealing with an existing "origin" remote
......@@ -117,7 +117,7 @@ func create(command *Command, args *Args) {
err = fmt.Errorf("Repository '%s' already exists and is public", repo.FullName)
utils.Check(err)
} else {
ui.Errorln("Existing repository detected. Updating git remote")
ui.Errorln("Existing repository detected")
project = foundProject
}
} else {
......@@ -138,10 +138,15 @@ func create(command *Command, args *Args) {
localRepo, err := github.LocalRepo()
utils.Check(err)
remote, _ := localRepo.OriginRemote()
if remote == nil || remote.Name != "origin" {
originName := "origin"
if originRemote, err := localRepo.RemoteByName(originName); err == nil {
originProject, err := originRemote.Project()
if err != nil || !originProject.SameAs(project) {
ui.Errorf(`A git remote named "%s" already exists and is set to push to '%s'.\n`, originRemote.Name, originRemote.PushURL)
}
} else {
url := project.GitURL("", "", true)
args.Before("git", "remote", "add", "-f", "origin", url)
args.Before("git", "remote", "add", "-f", originName, url)
}
webUrl := project.WebURL("", "", "")
......
......@@ -111,6 +111,7 @@ Feature: hub create
And the "origin" remote has url "git://github.com/mislav/dotfiles.git"
When I successfully run `hub create`
Then the url for "origin" should be "git://github.com/mislav/dotfiles.git"
And the output should contain exactly "https://github.com/mislav/dotfiles\n"
Scenario: Unrelated origin remote already exists
Given the GitHub API server:
......@@ -122,8 +123,12 @@ Feature: hub create
"""
And the "origin" remote has url "git://example.com/unrelated.git"
When I successfully run `hub create`
Then the output should contain exactly "https://github.com/mislav/dotfiles\n"
And the url for "origin" should be "git://example.com/unrelated.git"
Then the url for "origin" should be "git://example.com/unrelated.git"
And the stdout should contain exactly "https://github.com/mislav/dotfiles\n"
And the stderr should contain exactly:
"""
A git remote named "origin" already exists and is set to push to 'git://example.com/unrelated.git'.\n
"""
Scenario: Another remote already exists
Given the GitHub API server:
......@@ -145,7 +150,7 @@ Feature: hub create
}
"""
When I successfully run `hub create`
Then the output should contain "Existing repository detected. Updating git remote\n"
Then the output should contain "Existing repository detected\n"
And the url for "origin" should be "git@github.com:mislav/dotfiles.git"
Scenario: GitHub repo already exists and is not private
......
......@@ -170,10 +170,6 @@ func (r *GitHubRepo) RemoteForRepo(repo *Repository) (*Remote, error) {
return nil, fmt.Errorf("could not find git remote for %s/%s", repo.Owner.Login, repo.Name)
}
func (r *GitHubRepo) OriginRemote() (remote *Remote, err error) {
return r.RemoteByName("origin")
}
func (r *GitHubRepo) MainRemote() (remote *Remote, err error) {
r.loadRemotes()
......
......@@ -5,21 +5,8 @@ import (
"testing"
"github.com/bmizerany/assert"
"github.com/github/hub/fixtures"
)
func TestGitHubRepo_OriginRemote(t *testing.T) {
repo := fixtures.SetupTestRepo()
defer repo.TearDown()
localRepo, _ := LocalRepo()
gitRemote, _ := localRepo.OriginRemote()
assert.Equal(t, "origin", gitRemote.Name)
u, _ := url.Parse(repo.Remote)
assert.Equal(t, u, gitRemote.URL)
}
func TestGitHubRepo_remotesForPublish(t *testing.T) {
url, _ := url.Parse("ssh://git@github.com/Owner/repo.git")
remotes := []Remote{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册