Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
github
hub
提交
fd411335
H
hub
项目概览
github
/
hub
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
fd411335
编写于
6月 21, 2013
作者:
J
Jingwen Owen Ou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implement checkout
上级
3ee7aeec
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
73 addition
and
4 deletion
+73
-4
commands/checkout.go
commands/checkout.go
+47
-4
commands/checkout_test.go
commands/checkout_test.go
+14
-0
git/git.go
git/git.go
+6
-0
github/github.go
github/github.go
+6
-0
未找到文件。
commands/checkout.go
浏览文件 @
fd411335
package
commands
import
(
"fmt"
"github.com/jingweno/gh/git"
"github.com/jingweno/gh/github"
"github.com/jingweno/gh/utils"
"regexp"
)
var
cmdCheckout
=
&
Command
{
...
...
@@ -20,14 +23,54 @@ var cmdCheckout = &Command{
$ gh checkout https://github.com/jingweno/gh/pull/73 custom-branch-name
**/
func
checkout
(
command
*
Command
,
args
[]
string
)
{
var
err
error
if
len
(
args
)
>
0
{
args
=
transformCheckoutArgs
(
args
)
args
,
err
=
transformCheckoutArgs
(
args
)
utils
.
Check
(
err
)
}
err
:
=
git
.
ExecCheckout
(
args
)
err
=
git
.
ExecCheckout
(
args
)
utils
.
Check
(
err
)
}
func
transformCheckoutArgs
(
args
[]
string
)
[]
string
{
return
nil
func
transformCheckoutArgs
(
args
[]
string
)
([]
string
,
error
)
{
id
:=
parsePullRequestId
(
args
[
0
])
if
id
!=
""
{
newArgs
,
url
:=
removeItem
(
args
,
0
)
gh
:=
github
.
New
()
pullRequest
,
err
:=
gh
.
PullRequest
(
id
)
if
err
!=
nil
{
return
nil
,
err
}
user
:=
pullRequest
.
User
.
Login
branch
:=
pullRequest
.
Head
.
Ref
if
pullRequest
.
Head
.
Repo
.
ID
==
0
{
return
nil
,
fmt
.
Errorf
(
"%s's fork is not available anymore"
,
user
)
}
git
.
AddRemoteWithTrack
(
branch
,
user
,
url
)
trackedBranch
:=
fmt
.
Sprintf
(
"%s/%s"
,
user
,
branch
)
var
newBranchName
string
if
len
(
newArgs
)
>
0
{
newArgs
,
newBranchName
=
removeItem
(
newArgs
,
0
)
}
else
{
newBranchName
=
fmt
.
Sprintf
(
"%s-%s"
,
user
,
branch
)
}
newArgs
=
append
(
newArgs
,
"--track"
,
"-B"
,
newBranchName
,
trackedBranch
)
return
newArgs
,
nil
}
return
args
,
nil
}
func
parsePullRequestId
(
url
string
)
string
{
pullURLRegex
:=
regexp
.
MustCompile
(
"https://github
\\
.com/.+/.+/pull/(
\\
d+)"
)
if
pullURLRegex
.
MatchString
(
url
)
{
return
pullURLRegex
.
FindStringSubmatch
(
url
)[
1
]
}
return
""
}
commands/checkout_test.go
0 → 100644
浏览文件 @
fd411335
package
commands
import
(
"github.com/bmizerany/assert"
"testing"
)
func
TestParsePullRequestId
(
t
*
testing
.
T
)
{
url
:=
"https://github.com/jingweno/gh/pull/73"
assert
.
Equal
(
t
,
"73"
,
parsePullRequestId
(
url
))
url
=
"https://github.com/jingweno/gh/pull/"
assert
.
Equal
(
t
,
""
,
parsePullRequestId
(
url
))
}
git/git.go
浏览文件 @
fd411335
...
...
@@ -123,6 +123,12 @@ func AddRemote(name, url string) error {
return
err
}
func
AddRemoteWithTrack
(
trackedBranch
,
name
,
url
string
)
error
{
_
,
err
:=
execGitCmd
([]
string
{
"remote"
,
"add"
,
"-f"
,
"-t"
,
trackedBranch
,
name
,
url
})
return
err
}
func
ExecCheckout
(
args
[]
string
)
error
{
cmdArgs
:=
make
([]
string
,
0
)
cmdArgs
=
append
(
cmdArgs
,
"checkout"
)
...
...
github/github.go
浏览文件 @
fd411335
...
...
@@ -18,6 +18,12 @@ type GitHub struct {
config
*
Config
}
func
(
gh
*
GitHub
)
PullRequest
(
id
string
)
(
*
octokat
.
PullRequest
,
error
)
{
client
:=
gh
.
client
()
return
client
.
PullRequest
(
gh
.
repo
(),
id
)
}
func
(
gh
*
GitHub
)
CreatePullRequest
(
base
,
head
,
title
,
body
string
)
(
string
,
error
)
{
client
:=
gh
.
client
()
params
:=
octokat
.
PullRequestParams
{
base
,
head
,
title
,
body
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录