提交 014abc9c 编写于 作者: S Stan Hu

Handle threaded comments and prepare for inline comments

上级 5728ffbf
......@@ -13,31 +13,27 @@ module BitbucketServer
comment? && raw['commentAnchor']
end
def id
raw['id']
end
def note
comment['text']
end
def author_username
author['name']
end
def comment
return unless comment?
def author_email
author['emailAddress']
@comment ||=
if inline_comment?
PullRequestComment.new(raw_comment)
else
Comment.new(raw_comment)
end
end
# XXX Move this into MergeEvent
def merge_event?
action == 'MERGED'
end
def commiter_user
def committer_user
commit.fetch('committer', {})['displayName']
end
def commiter_email
def committer_email
commit.fetch('committer', {})['emailAddress']
end
......@@ -61,12 +57,12 @@ module BitbucketServer
private
def comment
def raw_comment
raw.fetch('comment', {})
end
def author
comment.fetch('author', {})
raw_comment.fetch('author', {})
end
# Anchor hash:
......
module Bitbucket
module BitbucketServer
module Representation
# A general comment with the structure:
# "comment": {
# "author": {
# "active": true,
# "displayName": "root",
# "emailAddress": "stanhu+bitbucket@gitlab.com",
# "id": 1,
# "links": {
# "self": [
# {
# "href": "http://localhost:7990/users/root"
# }
# ]
# },
# "name": "root",
# "slug": "root",
# "type": "NORMAL"
# }
# }
# }
class Comment < Representation::Base
def author
user['username']
def id
raw['id']
end
def author_username
author['username']
end
def author_email
author['displayName']
end
def note
raw.fetch('content', {}).fetch('raw', nil)
raw['text']
end
def created_at
raw['created_on']
Time.at(created_date / 1000) if created_date.is_a?(Integer)
end
def updated_at
raw['updated_on'] || raw['created_on']
Time.at(updated_date / 1000) if created_date.is_a?(Integer)
end
def comments
workset = [raw['comments']].compact
all_comments = []
until workset.empty?
comments = workset.pop
comments.each do |comment|
new_comments = comment.delete('comments')
workset << new_comments if new_comments
all_comments << Comment.new(comment)
end
end
all_comments
end
private
def user
raw.fetch('user', {})
def author
raw.fetch('author', {})
end
def created_date
raw['createdDate']
end
def updated_date
raw['updatedDate']
end
end
end
......
module Bitbucket
module BitbucketServer
module Representation
# An inline comment with the following structure that identifies
# the part of the diff:
#
# "commentAnchor": {
# "diffType": "EFFECTIVE",
# "fileType": "TO",
# "fromHash": "c5f4288162e2e6218180779c7f6ac1735bb56eab",
# "line": 1,
# "lineType": "ADDED",
# "orphaned": false,
# "path": "CHANGELOG.md",
# "toHash": "a4c2164330f2549f67c13f36a93884cf66e976be"
# }
class PullRequestComment < Comment
def iid
raw['id']
def file_type
comment_anchor['fileType']
end
def file_path
inline.fetch('path')
def from_sha
comment_anchor['fromHash']
end
def old_pos
inline.fetch('from')
def to_sha
comment_anchor['toHash']
end
def new_pos
inline.fetch('to')
def to?
file_type == 'TO'
end
def from?
file_type == 'FROM'
end
def parent_id
raw.fetch('parent', {}).fetch('id', nil)
def new_pos
return unless to?
comment_anchor['line']
end
def inline?
raw.key?('inline')
def old_pos
return unless from?
comment_anchor['line']
end
def has_parent?
raw.key?('parent')
def file_path
comment_anchor.fetch('path')
end
private
def inline
raw.fetch('inline', {})
def comment_anchor
raw.fetch('commentAnchor', {})
end
end
end
......
......@@ -105,11 +105,11 @@ module Gitlab
inline_comments, pr_comments = comments.partition(&:inline_comment?)
# import_inline_comments(inline_comments, pull_request, merge_request)
import_standalone_pr_comments(pr_comments, merge_request)
import_standalone_pr_comments(pr_comments.map(&:comment), merge_request)
end
def import_merge_event(merge_request, merge_event)
committer = merge_event.commiter_email
committer = merge_event.committer_email
return unless committer
......@@ -169,6 +169,10 @@ module Gitlab
pr_comments.each do |comment|
begin
merge_request.notes.create!(pull_request_comment_attributes(comment))
comment.comments.each do |replies|
merge_request.notes.create!(pull_request_comment_attributes(replies))
end
rescue StandardError => e
errors << { type: :pull_request, iid: comment.id, errors: e.message }
end
......@@ -180,7 +184,6 @@ module Gitlab
end
def pull_request_comment_attributes(comment)
byebug
{
project: project,
note: comment.note,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册