зеркало из 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)
|
||||
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{
|
||||
|
|
Загрузка…
Ссылка в новой задаче