Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
github
hub
提交
eec11428
H
hub
项目概览
github
/
hub
大约 1 年 前同步成功
通知
3
Star
22523
Fork
2406
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hub
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
eec11428
编写于
2月 15, 2017
作者:
M
Mislav Marohnić
提交者:
GitHub
2月 15, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1412 from blackjid/fork_within_org
Add a `--org` flag to `hub fork`
上级
3d3facba
cdd7a65e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
39 addition
and
6 deletion
+39
-6
commands/fork.go
commands/fork.go
+23
-4
features/fork.feature
features/fork.feature
+15
-0
github/client.go
github/client.go
+1
-2
未找到文件。
commands/fork.go
浏览文件 @
eec11428
...
...
@@ -10,28 +10,40 @@ import (
var
cmdFork
=
&
Command
{
Run
:
fork
,
Usage
:
"fork [--no-remote]"
,
Usage
:
"fork [--no-remote]
[--org=<ORGANIZATION>]
"
,
Long
:
`Fork the current project on GitHub and add a git remote for it.
## Options:
--no-remote
Skip adding a git remote for the fork.
--org=<ORGANIZATION>
Fork the repository within this organization.
## Examples:
$ hub fork
[ repo forked on GitHub ]
> git remote add -f USER git@github.com:USER/REPO.git
$ hub fork --org=ORGANIZATION
[ repo forked on Github into the ORGANIZATION organization]
> git remote add -f ORGANIZATION git@github.com:ORGANIZATION/REPO.git
## See also:
hub-clone(1), hub(1)
`
,
}
var
flagForkNoRemote
bool
var
(
flagForkNoRemote
bool
flagForkOrganization
string
)
func
init
()
{
cmdFork
.
Flag
.
BoolVar
(
&
flagForkNoRemote
,
"no-remote"
,
false
,
""
)
cmdFork
.
Flag
.
StringVarP
(
&
flagForkOrganization
,
"org"
,
""
,
""
,
"ORGANIZATION"
)
CmdRunner
.
Use
(
cmdFork
)
}
...
...
@@ -56,7 +68,14 @@ func fork(cmd *Command, args *Args) {
utils
.
Check
(
fmt
.
Errorf
(
"Error creating fork: %s"
,
err
))
}
forkProject
:=
github
.
NewProject
(
host
.
User
,
project
.
Name
,
project
.
Host
)
params
:=
map
[
string
]
interface
{}{}
forkOwner
:=
host
.
User
if
flagForkOrganization
!=
""
{
forkOwner
=
flagForkOrganization
params
[
"organization"
]
=
forkOwner
}
forkProject
:=
github
.
NewProject
(
forkOwner
,
project
.
Name
,
project
.
Host
)
newRemoteName
:=
forkProject
.
Owner
client
:=
github
.
NewClient
(
project
.
Host
)
...
...
@@ -73,7 +92,7 @@ func fork(cmd *Command, args *Args) {
}
}
else
{
if
!
args
.
Noop
{
newRepo
,
err
:=
client
.
ForkRepository
(
project
)
newRepo
,
err
:=
client
.
ForkRepository
(
project
,
params
)
utils
.
Check
(
err
)
forkProject
.
Owner
=
newRepo
.
Owner
.
Login
forkProject
.
Name
=
newRepo
.
Name
...
...
features/fork.feature
浏览文件 @
eec11428
...
...
@@ -13,6 +13,7 @@ Feature: hub fork
}
get('/repos/mislav/dotfiles', :host_name => 'api.github.com') { 404 }
post('/repos/evilchelu/dotfiles/forks', :host_name => 'api.github.com') {
assert :organization => nil
status 202
json :name => 'dotfiles', :owner => { :login => 'mislav' }
}
...
...
@@ -202,3 +203,17 @@ Scenario: Related fork already exists
And
"git.my.org"
is a whitelisted Enterprise host
When
I successfully run `hub fork`
Then the url for "mislav" should be "git@git.my.org
:
mislav/dotfiles.git"
Scenario
:
Fork a repo to a specific organization
Given the GitHub API server
:
"""
get('/repos/acme/dotfiles') { 404 }
post('/repos/evilchelu/dotfiles/forks') {
assert :organization => "acme"
status 202
json :name => 'dotfiles', :owner => { :login => 'acme' }
}
"""
When
I successfully run `hub fork --org=acme`
Then the output should contain exactly "new remote
:
acme\n"
Then the url for "acme" should be "git@github.com
:
acme/dotfiles.git"
github/client.go
浏览文件 @
eec11428
...
...
@@ -419,13 +419,12 @@ type RepositoryPermissions struct {
Pull
bool
`json:"pull"`
}
func
(
client
*
Client
)
ForkRepository
(
project
*
Project
)
(
repo
*
Repository
,
err
error
)
{
func
(
client
*
Client
)
ForkRepository
(
project
*
Project
,
params
map
[
string
]
interface
{}
)
(
repo
*
Repository
,
err
error
)
{
api
,
err
:=
client
.
simpleApi
()
if
err
!=
nil
{
return
}
params
:=
map
[
string
]
interface
{}{}
res
,
err
:=
api
.
PostJSON
(
fmt
.
Sprintf
(
"repos/%s/%s/forks"
,
project
.
Owner
,
project
.
Name
),
params
)
if
err
=
checkStatus
(
202
,
"creating fork"
,
res
,
err
);
err
!=
nil
{
return
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录