Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
cc4a39cc
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cc4a39cc
编写于
7月 05, 2018
作者:
S
Stan Hu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Reduce number of API requests and fix merge request events
上级
12b031ce
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
43 addition
and
52 deletion
+43
-52
lib/gitlab/bitbucket_server_import/importer.rb
lib/gitlab/bitbucket_server_import/importer.rb
+43
-52
未找到文件。
lib/gitlab/bitbucket_server_import/importer.rb
浏览文件 @
cc4a39cc
...
...
@@ -100,59 +100,61 @@ module Gitlab
# 2. Retried import, repo is broken or not imported but +exists?+ still returns true
project
.
repository
.
expire_content_cache
if
project
.
repository_exists?
raise
RuntimeError
,
e
.
message
raise
e
.
message
end
def
import_pull_requests
pull_requests
=
client
.
pull_requests
(
project_key
,
repository_slug
)
pull_requests
.
each
do
|
pull_request
|
begin
restore_branches
(
pull_request
)
description
=
''
description
+=
@formatter
.
author_line
(
pull_request
.
author
)
unless
find_user_id
(
pull_request
.
author_email
)
description
+=
pull_request
.
description
source_branch_sha
=
pull_request
.
source_branch_sha
target_branch_sha
=
pull_request
.
target_branch_sha
source_branch_sha
=
project
.
repository
.
commit
(
source_branch_sha
)
&
.
sha
||
source_branch_sha
target_branch_sha
=
project
.
repository
.
commit
(
target_branch_sha
)
&
.
sha
||
target_branch_sha
project
.
merge_requests
.
find_by
(
iid:
pull_request
.
iid
)
&
.
destroy
attributes
=
{
iid:
pull_request
.
iid
,
title:
pull_request
.
title
,
description:
description
,
source_project:
project
,
source_branch:
Gitlab
::
Git
.
ref_name
(
pull_request
.
source_branch_name
),
source_branch_sha:
source_branch_sha
,
target_project:
project
,
target_branch:
Gitlab
::
Git
.
ref_name
(
pull_request
.
target_branch_name
),
target_branch_sha:
target_branch_sha
,
state:
pull_request
.
state
,
author_id:
gitlab_user_id
(
project
,
pull_request
.
author_email
),
assignee_id:
nil
,
created_at:
pull_request
.
created_at
,
updated_at:
pull_request
.
updated_at
}
attributes
[
:merge_commit_sha
]
=
target_branch_sha
if
pull_request
.
merged?
merge_request
=
project
.
merge_requests
.
create!
(
attributes
)
import_pull_request_comments
(
pull_request
,
merge_request
)
if
merge_request
.
persisted?
import_bitbucket_pull_request
(
pull_request
)
rescue
StandardError
=>
e
errors
<<
{
type: :pull_request
,
iid:
pull_request
.
iid
,
errors:
e
.
message
,
trace:
e
.
backtrace
.
join
(
"
\n
"
),
raw_response:
pull_request
.
raw
}
end
end
end
def
import_bitbucket_pull_request
(
pull_request
)
restore_branches
(
pull_request
)
description
=
''
description
+=
@formatter
.
author_line
(
pull_request
.
author
)
unless
find_user_id
(
pull_request
.
author_email
)
description
+=
pull_request
.
description
source_branch_sha
=
pull_request
.
source_branch_sha
target_branch_sha
=
pull_request
.
target_branch_sha
source_branch_sha
=
project
.
repository
.
commit
(
source_branch_sha
)
&
.
sha
||
source_branch_sha
target_branch_sha
=
project
.
repository
.
commit
(
target_branch_sha
)
&
.
sha
||
target_branch_sha
project
.
merge_requests
.
find_by
(
iid:
pull_request
.
iid
)
&
.
destroy
attributes
=
{
iid:
pull_request
.
iid
,
title:
pull_request
.
title
,
description:
description
,
source_project:
project
,
source_branch:
Gitlab
::
Git
.
ref_name
(
pull_request
.
source_branch_name
),
source_branch_sha:
source_branch_sha
,
target_project:
project
,
target_branch:
Gitlab
::
Git
.
ref_name
(
pull_request
.
target_branch_name
),
target_branch_sha:
target_branch_sha
,
state:
pull_request
.
state
,
author_id:
gitlab_user_id
(
project
,
pull_request
.
author_email
),
assignee_id:
nil
,
created_at:
pull_request
.
created_at
,
updated_at:
pull_request
.
updated_at
}
attributes
[
:merge_commit_sha
]
=
target_branch_sha
if
pull_request
.
merged?
merge_request
=
project
.
merge_requests
.
create!
(
attributes
)
import_pull_request_comments
(
pull_request
,
merge_request
)
if
merge_request
.
persisted?
end
def
import_pull_request_comments
(
pull_request
,
merge_request
)
# XXX This is inefficient since we are making multiple requests to the activities endpoint
merge_event
=
client
.
activities
(
project_key
,
repository_slug
,
pull_request
.
iid
).
find
(
&
:merge_event?
)
comments
,
other_activities
=
client
.
activities
(
project_key
,
repository_slug
,
pull_request
.
iid
).
partition
(
&
:comment?
)
merge_event
=
other_activities
.
find
(
&
:merge_event?
)
import_merge_event
(
merge_request
,
merge_event
)
if
merge_event
comments
=
client
.
activities
(
project_key
,
repository_slug
,
pull_request
.
iid
).
select
(
&
:comment?
)
inline_comments
,
pr_comments
=
comments
.
partition
(
&
:inline_comment?
)
import_inline_comments
(
inline_comments
.
map
(
&
:comment
),
pull_request
,
merge_request
)
...
...
@@ -162,22 +164,11 @@ module Gitlab
def
import_merge_event
(
merge_request
,
merge_event
)
committer
=
merge_event
.
committer_email
return
unless
committer
user_id
=
if
committer
find_user_id
(
committer
)
else
User
.
ghost
end
user_id
=
find_user_id
(
committer
)
if
committer
user
=
User
.
ghost
user
||=
find_user_id
(
committer
)
if
committer
timestamp
=
merge_event
.
merge_timestamp
return
unless
user_id
event
=
Event
.
create
(
merged_by_id:
user_id
,
merged_at:
timestamp
)
MergeRequestMetricsService
.
new
(
merge_request
.
metrics
).
merge
(
event
)
metric
=
MergeRequest
::
Metrics
.
find_or_initialize_by
(
merge_request:
merge_request
)
metric
.
update_attributes
(
merged_by:
user
,
merged_at:
timestamp
)
end
def
import_inline_comments
(
inline_comments
,
pull_request
,
merge_request
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录