1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
module Gitlab
module GithubImport
class PullRequestFormatter < BaseFormatter
def attributes
{
iid: number,
title: raw_data.title,
description: description,
source_project: source_project,
source_branch: source_branch,
head_source_sha: source_sha,
target_project: target_project,
target_branch: target_branch,
base_target_sha: target_sha,
state: state,
milestone: milestone,
author_id: author_id,
assignee_id: assignee_id,
created_at: raw_data.created_at,
updated_at: updated_at
}
end
def number
raw_data.number
end
def valid?
!cross_project?
end
def source_branch_exists?
source_project.repository.branch_exists?(source_ref)
end
def source_branch
@source_branch ||= if source_branch_exists?
source_ref
else
"#{source_ref}-#{short_id(source_sha)}"
end
end
def short_id(sha, length = 7)
sha.to_s[0..length]
end
def source_sha
raw_data.head.sha
end
def target_branch_exists?
target_project.repository.branch_exists?(target_ref)
end
def target_branch
@target_branch ||= if target_branch_exists?
target_ref
else
"#{target_ref}-#{short_id(target_sha)}"
end
end
def target_sha
raw_data.base.sha
end
private
def assigned?
raw_data.assignee.present?
end
def assignee_id
if assigned?
gl_user_id(raw_data.assignee.id)
end
end
def author
raw_data.user.login
end
def author_id
gl_user_id(raw_data.user.id) || project.creator_id
end
def body
raw_data.body || ""
end
def cross_project?
source_repo.present? && target_repo.present? && source_repo.id != target_repo.id
end
def description
formatter.author_line(author) + body
end
def milestone
if raw_data.milestone.present?
project.milestones.find_by(iid: raw_data.milestone.number)
end
end
def source_project
project
end
def source_repo
raw_data.head.repo
end
def source_ref
raw_data.head.ref
end
def target_project
project
end
def target_repo
raw_data.base.repo
end
def target_ref
raw_data.base.ref
end
def state
@state ||= case true
when raw_data.state == 'closed' && raw_data.merged_at.present?
'merged'
when raw_data.state == 'closed'
'closed'
else
'opened'
end
end
def updated_at
case state
when 'merged' then raw_data.merged_at
when 'closed' then raw_data.closed_at
else
raw_data.updated_at
end
end
end
end
end
|