fix: 合并请求对比代码返回合并信息

This commit is contained in:
viletyy 2021-07-12 18:45:35 +08:00
commit ace13abe92
5 changed files with 113 additions and 89 deletions

View File

@ -6,23 +6,45 @@ class CompareController < ApplicationController
end end
def show def show
load_compare_params
compare compare
@merge_status, @merge_message = get_merge_message
end end
private private
def get_merge_message
if @base.blank? || @head.blank?
return -2, "请选择分支"
else
if @head.include?(":")
fork_project = @project.forked_projects.joins(:owner).where(users: {login: @head.to_s.split("/")[0]}).take
return -2, "请选择正确的仓库" unless fork_project.present?
@exist_pullrequest = @project.pull_requests.where(is_original: true, head: @head.to_s.split(":")[1], base: @base, status: 0, fork_project_id: fork_project.id).take
else
@exist_pullrequest = @project.pull_requests.where(is_original: false, head: @base, base: @head, status: 0).take
end
if @exist_pullrequest.present?
return -2, "在这些分支之间的合并请求已存在:<a href='/projects/#{@owner.login}/#{@project.identifier}/pulls/#{@exist_pullrequest.id}/Messagecount'>#{@exist_pullrequest.try(:title)}</a>"
else
if @compare_result["Commits"].blank? && @compare_result["Diff"].blank?
return -2, "分支内容相同,无需创建合并请求"
end
end
end
return 0, "可以合并"
end
def compare def compare
base, head = compare_params
# TODO: 处理fork的项目向源项目发送PR的base、head参数问题 # TODO: 处理fork的项目向源项目发送PR的base、head参数问题
@compare_result ||= @compare_result ||=
head.include?(":") ? gitea_compare(base, head) : gitea_compare(head, base) @head.include?(":") ? gitea_compare(@base, @head) : gitea_compare(@head, @base)
end end
def compare_params def load_compare_params
base = Addressable::URI.unescape(params[:base]) @base = Addressable::URI.unescape(params[:base])
head = params[:head].include?('json') ? params[:head]&.split('.json')[0] : params[:head] @head = params[:head].include?('json') ? params[:head]&.split('.json')[0] : params[:head]
[base, head]
end end
def gitea_compare(base, head) def gitea_compare(base, head)

View File

@ -1,80 +1,80 @@
# == Schema Information # == Schema Information
# #
# Table name: projects # Table name: projects
# #
# id :integer not null, primary key # id :integer not null, primary key
# name :string(255) default(""), not null # name :string(255) default(""), not null
# description :text(4294967295) # description :text(4294967295)
# homepage :string(255) default("") # homepage :string(255) default("")
# is_public :boolean default("1"), not null # is_public :boolean default("1"), not null
# parent_id :integer # parent_id :integer
# created_on :datetime # created_on :datetime
# updated_on :datetime # updated_on :datetime
# identifier :string(255) # identifier :string(255)
# status :integer default("1"), not null # status :integer default("1"), not null
# lft :integer # lft :integer
# rgt :integer # rgt :integer
# inherit_members :boolean default("0"), not null # inherit_members :boolean default("0"), not null
# project_type :integer default("0") # project_type :integer default("0")
# hidden_repo :boolean default("0"), not null # hidden_repo :boolean default("0"), not null
# attachmenttype :integer default("1") # attachmenttype :integer default("1")
# user_id :integer # user_id :integer
# dts_test :integer default("0") # dts_test :integer default("0")
# enterprise_name :string(255) # enterprise_name :string(255)
# organization_id :integer # organization_id :integer
# project_new_type :integer # project_new_type :integer
# gpid :integer # gpid :integer
# forked_from_project_id :integer # forked_from_project_id :integer
# forked_count :integer default("0") # forked_count :integer default("0")
# publish_resource :integer default("0") # publish_resource :integer default("0")
# visits :integer default("0") # visits :integer default("0")
# hot :integer default("0") # hot :integer default("0")
# invite_code :string(255) # invite_code :string(255)
# qrcode :string(255) # qrcode :string(255)
# qrcode_expiretime :integer default("0") # qrcode_expiretime :integer default("0")
# script :text(65535) # script :text(65535)
# training_status :integer default("0") # training_status :integer default("0")
# rep_identifier :string(255) # rep_identifier :string(255)
# project_category_id :integer # project_category_id :integer
# project_language_id :integer # project_language_id :integer
# praises_count :integer default("0") # praises_count :integer default("0")
# watchers_count :integer default("0") # watchers_count :integer default("0")
# issues_count :integer default("0") # issues_count :integer default("0")
# pull_requests_count :integer default("0") # pull_requests_count :integer default("0")
# language :string(255) # language :string(255)
# versions_count :integer default("0") # versions_count :integer default("0")
# issue_tags_count :integer default("0") # issue_tags_count :integer default("0")
# closed_issues_count :integer default("0") # closed_issues_count :integer default("0")
# open_devops :boolean default("0") # open_devops :boolean default("0")
# gitea_webhook_id :integer # gitea_webhook_id :integer
# open_devops_count :integer default("0") # open_devops_count :integer default("0")
# recommend :boolean default("0") # recommend :boolean default("0")
# platform :integer default("0") # platform :integer default("0")
# license_id :integer # license_id :integer
# ignore_id :integer # ignore_id :integer
# default_branch :string(255) default("master") # default_branch :string(255) default("master")
# website :string(255) # website :string(255)
# lesson_url :string(255) # lesson_url :string(255)
# #
# Indexes # Indexes
# #
# index_projects_on_forked_from_project_id (forked_from_project_id) # index_projects_on_forked_from_project_id (forked_from_project_id)
# index_projects_on_identifier (identifier) # index_projects_on_identifier (identifier)
# index_projects_on_invite_code (invite_code) # index_projects_on_invite_code (invite_code)
# index_projects_on_is_public (is_public) # index_projects_on_is_public (is_public)
# index_projects_on_lft (lft) # index_projects_on_lft (lft)
# index_projects_on_license_id (license_id) # index_projects_on_license_id (license_id)
# index_projects_on_name (name) # index_projects_on_name (name)
# index_projects_on_platform (platform) # index_projects_on_platform (platform)
# index_projects_on_project_category_id (project_category_id) # index_projects_on_project_category_id (project_category_id)
# index_projects_on_project_language_id (project_language_id) # index_projects_on_project_language_id (project_language_id)
# index_projects_on_project_type (project_type) # index_projects_on_project_type (project_type)
# index_projects_on_recommend (recommend) # index_projects_on_recommend (recommend)
# index_projects_on_rgt (rgt) # index_projects_on_rgt (rgt)
# index_projects_on_status (status) # index_projects_on_status (status)
# index_projects_on_updated_on (updated_on) # index_projects_on_updated_on (updated_on)
# #
class Project < ApplicationRecord class Project < ApplicationRecord
include Matchable include Matchable

View File

@ -83,3 +83,5 @@ json.diff do
end end
end end
json.status @merge_status
json.message @merge_message

View File

@ -2,8 +2,8 @@ json.array! @tags do |tag|
if tag.present? if tag.present?
json.name tag['name'] json.name tag['name']
json.id tag['id'] json.id tag['id']
json.zipball_url tag['zipball_url'] json.zipball_url render_zip_url(@owner, @repository, tag['name'])
json.tarball_url tag['tarball_url'] json.tarball_url render_tar_url(@owner, @repository, tag['name'])
json.commit do json.commit do
json.sha tag['commit']['sha'] json.sha tag['commit']['sha']
end end

View File

@ -14,8 +14,8 @@ json.releases do
json.name re["name"] json.name re["name"]
json.body re["body"] json.body re["body"]
json.url re["url"] json.url re["url"]
json.tarball_url re["tarball_url"] json.tarball_url render_tar_url(@owner, @repository, re["tag_name"])
json.zipball_url re["zipball_url"] json.zipball_url render_zip_url(@owner, @repository, re["tag_name"])
json.draft re["draft"] ? "草稿" : (re["prerelease"] ? "预发行" : "稳定") json.draft re["draft"] ? "草稿" : (re["prerelease"] ? "预发行" : "稳定")
json.created_at format_time(version.created_at.to_s.to_time) json.created_at format_time(version.created_at.to_s.to_time)
json.published_at format_time(version.created_at.to_s.to_time) json.published_at format_time(version.created_at.to_s.to_time)
@ -30,8 +30,8 @@ json.releases do
json.name re["name"] json.name re["name"]
json.body re["body"] json.body re["body"]
json.url re["url"] json.url re["url"]
json.tarball_url re["tarball_url"] json.tarball_url render_tar_url(@owner, @repository, re["tag_name"])
json.zipball_url re["zipball_url"] json.zipball_url render_zip_url(@owner, @repository, re["tag_name"])
json.draft re["draft"] ? "草稿" : (re["prerelease"] ? "预发行" : "稳定") json.draft re["draft"] ? "草稿" : (re["prerelease"] ? "预发行" : "稳定")
json.created_at format_time(version.created_at.to_s.to_time) json.created_at format_time(version.created_at.to_s.to_time)
json.published_at format_time(version.created_at.to_s.to_time) json.published_at format_time(version.created_at.to_s.to_time)