Support bare repo creation
This commit is contained in:
parent
9b9e654c76
commit
4a7f2e57b0
2 changed files with 100 additions and 3 deletions
|
|
@ -748,10 +748,12 @@ func isLocalRepo(gitClient *git.Client) (bool, error) {
|
||||||
return false, projectDirErr
|
return false, projectDirErr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if projectDir != ".git" {
|
|
||||||
return false, nil
|
if projectDir == ".git" || projectDir == "." {
|
||||||
|
return true, nil
|
||||||
}
|
}
|
||||||
return true, nil
|
|
||||||
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// clone the checkout branch to specified path
|
// clone the checkout branch to specified path
|
||||||
|
|
|
||||||
|
|
@ -443,6 +443,68 @@ func Test_createRun(t *testing.T) {
|
||||||
},
|
},
|
||||||
wantStdout: "✓ Created repository OWNER/REPO on GitHub\n https://github.com/OWNER/REPO\n",
|
wantStdout: "✓ Created repository OWNER/REPO on GitHub\n https://github.com/OWNER/REPO\n",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "interactive with existing bare repository public",
|
||||||
|
opts: &CreateOptions{Interactive: true},
|
||||||
|
tty: true,
|
||||||
|
promptStubs: func(p *prompter.PrompterMock) {
|
||||||
|
p.ConfirmFunc = func(message string, defaultValue bool) (bool, error) {
|
||||||
|
switch message {
|
||||||
|
case "Add a remote?":
|
||||||
|
return false, nil
|
||||||
|
default:
|
||||||
|
return false, fmt.Errorf("unexpected confirm prompt: %s", message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p.InputFunc = func(message, defaultValue string) (string, error) {
|
||||||
|
switch message {
|
||||||
|
case "Path to local repository":
|
||||||
|
return defaultValue, nil
|
||||||
|
case "Repository name":
|
||||||
|
return "REPO", nil
|
||||||
|
case "Description":
|
||||||
|
return "my new repo", nil
|
||||||
|
default:
|
||||||
|
return "", fmt.Errorf("unexpected input prompt: %s", message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p.SelectFunc = func(message, defaultValue string, options []string) (int, error) {
|
||||||
|
switch message {
|
||||||
|
case "What would you like to do?":
|
||||||
|
return prompter.IndexFor(options, "Push an existing local repository to GitHub")
|
||||||
|
case "Visibility":
|
||||||
|
return prompter.IndexFor(options, "Private")
|
||||||
|
default:
|
||||||
|
return 0, fmt.Errorf("unexpected select prompt: %s", message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
httpStubs: func(reg *httpmock.Registry) {
|
||||||
|
reg.Register(
|
||||||
|
httpmock.GraphQL(`query UserCurrent\b`),
|
||||||
|
httpmock.StringResponse(`{"data":{"viewer":{"login":"someuser","organizations":{"nodes": []}}}}`))
|
||||||
|
reg.Register(
|
||||||
|
httpmock.GraphQL(`mutation RepositoryCreate\b`),
|
||||||
|
httpmock.StringResponse(`
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"createRepository": {
|
||||||
|
"repository": {
|
||||||
|
"id": "REPOID",
|
||||||
|
"name": "REPO",
|
||||||
|
"owner": {"login":"OWNER"},
|
||||||
|
"url": "https://github.com/OWNER/REPO"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`))
|
||||||
|
},
|
||||||
|
execStubs: func(cs *run.CommandStubber) {
|
||||||
|
cs.Register(`git -C . rev-parse --git-dir`, 0, ".")
|
||||||
|
cs.Register(`git -C . rev-parse HEAD`, 0, "commithash")
|
||||||
|
},
|
||||||
|
wantStdout: "✓ Created repository OWNER/REPO on GitHub\n https://github.com/OWNER/REPO\n",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "interactive with existing repository public add remote and push",
|
name: "interactive with existing repository public add remote and push",
|
||||||
opts: &CreateOptions{Interactive: true},
|
opts: &CreateOptions{Interactive: true},
|
||||||
|
|
@ -696,6 +758,39 @@ func Test_createRun(t *testing.T) {
|
||||||
},
|
},
|
||||||
wantStdout: "https://github.com/OWNER/REPO\n",
|
wantStdout: "https://github.com/OWNER/REPO\n",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "noninteractive create bare from source",
|
||||||
|
opts: &CreateOptions{
|
||||||
|
Interactive: false,
|
||||||
|
Source: ".",
|
||||||
|
Name: "REPO",
|
||||||
|
Visibility: "PRIVATE",
|
||||||
|
},
|
||||||
|
tty: false,
|
||||||
|
httpStubs: func(reg *httpmock.Registry) {
|
||||||
|
reg.Register(
|
||||||
|
httpmock.GraphQL(`mutation RepositoryCreate\b`),
|
||||||
|
httpmock.StringResponse(`
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"createRepository": {
|
||||||
|
"repository": {
|
||||||
|
"id": "REPOID",
|
||||||
|
"name": "REPO",
|
||||||
|
"owner": {"login":"OWNER"},
|
||||||
|
"url": "https://github.com/OWNER/REPO"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`))
|
||||||
|
},
|
||||||
|
execStubs: func(cs *run.CommandStubber) {
|
||||||
|
cs.Register(`git -C . rev-parse --git-dir`, 0, ".")
|
||||||
|
cs.Register(`git -C . rev-parse HEAD`, 0, "commithash")
|
||||||
|
cs.Register(`git -C . remote add origin https://github.com/OWNER/REPO`, 0, "")
|
||||||
|
},
|
||||||
|
wantStdout: "https://github.com/OWNER/REPO\n",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "noninteractive clone from scratch",
|
name: "noninteractive clone from scratch",
|
||||||
opts: &CreateOptions{
|
opts: &CreateOptions{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue