зеркало из https://github.com/mislav/hub.git
Improve `hub create` dealing with an existing "origin" remote
- No longer says "updating git remote", but not actually doing anything - Shows a helpful warning about "origin" pointing to a possibly unrelated repo
This commit is contained in:
Родитель
cc38879bd6
Коммит
9ac583cacf
|
@ -117,7 +117,7 @@ func create(command *Command, args *Args) {
|
||||||
err = fmt.Errorf("Repository '%s' already exists and is public", repo.FullName)
|
err = fmt.Errorf("Repository '%s' already exists and is public", repo.FullName)
|
||||||
utils.Check(err)
|
utils.Check(err)
|
||||||
} else {
|
} else {
|
||||||
ui.Errorln("Existing repository detected. Updating git remote")
|
ui.Errorln("Existing repository detected")
|
||||||
project = foundProject
|
project = foundProject
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -138,10 +138,15 @@ func create(command *Command, args *Args) {
|
||||||
localRepo, err := github.LocalRepo()
|
localRepo, err := github.LocalRepo()
|
||||||
utils.Check(err)
|
utils.Check(err)
|
||||||
|
|
||||||
remote, _ := localRepo.OriginRemote()
|
originName := "origin"
|
||||||
if remote == nil || remote.Name != "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)
|
url := project.GitURL("", "", true)
|
||||||
args.Before("git", "remote", "add", "-f", "origin", url)
|
args.Before("git", "remote", "add", "-f", originName, url)
|
||||||
}
|
}
|
||||||
|
|
||||||
webUrl := project.WebURL("", "", "")
|
webUrl := project.WebURL("", "", "")
|
||||||
|
|
|
@ -111,6 +111,7 @@ Feature: hub create
|
||||||
And the "origin" remote has url "git://github.com/mislav/dotfiles.git"
|
And the "origin" remote has url "git://github.com/mislav/dotfiles.git"
|
||||||
When I successfully run `hub create`
|
When I successfully run `hub create`
|
||||||
Then the url for "origin" should be "git://github.com/mislav/dotfiles.git"
|
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
|
Scenario: Unrelated origin remote already exists
|
||||||
Given the GitHub API server:
|
Given the GitHub API server:
|
||||||
|
@ -122,8 +123,12 @@ Feature: hub create
|
||||||
"""
|
"""
|
||||||
And the "origin" remote has url "git://example.com/unrelated.git"
|
And the "origin" remote has url "git://example.com/unrelated.git"
|
||||||
When I successfully run `hub create`
|
When I successfully run `hub create`
|
||||||
Then the output should contain exactly "https://github.com/mislav/dotfiles\n"
|
Then the url for "origin" should be "git://example.com/unrelated.git"
|
||||||
And 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
|
Scenario: Another remote already exists
|
||||||
Given the GitHub API server:
|
Given the GitHub API server:
|
||||||
|
@ -145,7 +150,7 @@ Feature: hub create
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
When I successfully run `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"
|
And the url for "origin" should be "git@github.com:mislav/dotfiles.git"
|
||||||
|
|
||||||
Scenario: GitHub repo already exists and is not private
|
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)
|
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) {
|
func (r *GitHubRepo) MainRemote() (remote *Remote, err error) {
|
||||||
r.loadRemotes()
|
r.loadRemotes()
|
||||||
|
|
||||||
|
|
|
@ -5,21 +5,8 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/bmizerany/assert"
|
"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) {
|
func TestGitHubRepo_remotesForPublish(t *testing.T) {
|
||||||
url, _ := url.Parse("ssh://git@github.com/Owner/repo.git")
|
url, _ := url.Parse("ssh://git@github.com/Owner/repo.git")
|
||||||
remotes := []Remote{
|
remotes := []Remote{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче