Fix error on project name

Add project path to sql query to build proper path
This commit is contained in:
Gosia Ksionek 2019-08-05 21:15:00 +00:00 committed by Mayra Cabrera
parent 1dfbb27f6e
commit 6c5e948013
13 changed files with 43 additions and 31 deletions

View file

@ -26,6 +26,6 @@ class AnalyticsIssueEntity < Grape::Entity
private private
def url_to(route, object) def url_to(route, object)
public_send("#{route}_url", object[:path], object[:name], object[:iid].to_s) # rubocop:disable GitlabSecurity/PublicSend public_send("#{route}_url", object[:namespace_path], object[:project_path], object[:iid].to_s) # rubocop:disable GitlabSecurity/PublicSend
end end
end end

View file

@ -0,0 +1,5 @@
---
title: Fix broken issue links and possible 500 error on cycle analytics page when project name and path are different
merge_request: 31471
author:
type: fixed

View file

@ -19,9 +19,10 @@ module Gitlab
.join(projects_table).on(issue_table[:project_id].eq(projects_table[:id])) .join(projects_table).on(issue_table[:project_id].eq(projects_table[:id]))
.join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id])) .join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id]))
.project(issue_table[:project_id].as("project_id")) .project(issue_table[:project_id].as("project_id"))
.where(issue_table[:project_id].in(project_ids)) .project(projects_table[:path].as("project_path"))
.where(routes_table[:source_type].eq('Namespace')) .project(routes_table[:path].as("namespace_path"))
.where(issue_table[:created_at].gteq(options[:from]))
query = limit_query(query, project_ids)
# Load merge_requests # Load merge_requests
@ -30,6 +31,12 @@ module Gitlab
query query
end end
def limit_query(query, project_ids)
query.where(issue_table[:project_id].in(project_ids))
.where(routes_table[:source_type].eq('Namespace'))
.where(issue_table[:created_at].gteq(options[:from]))
end
def load_merge_requests(query) def load_merge_requests(query)
query.join(mr_table, Arel::Nodes::OuterJoin) query.join(mr_table, Arel::Nodes::OuterJoin)
.on(mr_table[:id].eq(mr_closing_issues_table[:merge_request_id])) .on(mr_table[:id].eq(mr_closing_issues_table[:merge_request_id]))

View file

@ -11,9 +11,7 @@ module Gitlab
mr_table[:id], mr_table[:id],
mr_table[:created_at], mr_table[:created_at],
mr_table[:state], mr_table[:state],
mr_table[:author_id], mr_table[:author_id]]
projects_table[:name],
routes_table[:path]]
@order = mr_table[:created_at] @order = mr_table[:created_at]
super(*args) super(*args)

View file

@ -10,9 +10,7 @@ module Gitlab
issue_table[:iid], issue_table[:iid],
issue_table[:id], issue_table[:id],
issue_table[:created_at], issue_table[:created_at],
issue_table[:author_id], issue_table[:author_id]]
projects_table[:name],
routes_table[:path]]
super(*args) super(*args)
end end

View file

@ -8,12 +8,19 @@ module Gitlab
.join(projects_table).on(issue_table[:project_id].eq(projects_table[:id])) .join(projects_table).on(issue_table[:project_id].eq(projects_table[:id]))
.join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id])) .join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id]))
.project(issue_table[:project_id].as("project_id")) .project(issue_table[:project_id].as("project_id"))
.where(issue_table[:project_id].in(project_ids)) .project(projects_table[:path].as("project_path"))
.project(routes_table[:path].as("namespace_path"))
query = limit_query(query, project_ids)
query
end
def limit_query(query, project_ids)
query.where(issue_table[:project_id].in(project_ids))
.where(routes_table[:source_type].eq('Namespace')) .where(routes_table[:source_type].eq('Namespace'))
.where(issue_table[:created_at].gteq(options[:from])) .where(issue_table[:created_at].gteq(options[:from]))
.where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil))) .where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil)))
query
end end
end end
end end

View file

@ -10,9 +10,7 @@ module Gitlab
issue_table[:iid], issue_table[:iid],
issue_table[:id], issue_table[:id],
issue_table[:created_at], issue_table[:created_at],
issue_table[:author_id], issue_table[:author_id]]
projects_table[:name],
routes_table[:path]]
super(*args) super(*args)
end end

View file

@ -8,14 +8,16 @@ module Gitlab
.join(projects_table).on(issue_table[:project_id].eq(projects_table[:id])) .join(projects_table).on(issue_table[:project_id].eq(projects_table[:id]))
.join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id])) .join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id]))
.project(issue_table[:project_id].as("project_id")) .project(issue_table[:project_id].as("project_id"))
.project(projects_table[:path].as("project_path"))
.project(routes_table[:path].as("namespace_path"))
.where(issue_table[:project_id].in(project_ids)) .where(issue_table[:project_id].in(project_ids))
.where(routes_table[:source_type].eq('Namespace')) .where(routes_table[:source_type].eq('Namespace'))
query = add_conditions_to_query(query) query = limit_query(query)
query query
end end
def add_conditions_to_query(query) def limit_query(query)
query.where(issue_table[:created_at].gteq(options[:from])) query.where(issue_table[:created_at].gteq(options[:from]))
.where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil))) .where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil)))
.where(issue_metrics_table[:first_mentioned_in_commit_at].not_eq(nil)) .where(issue_metrics_table[:first_mentioned_in_commit_at].not_eq(nil))

View file

@ -11,7 +11,6 @@ module Gitlab
issue_table[:id], issue_table[:id],
issue_table[:created_at], issue_table[:created_at],
issue_table[:author_id], issue_table[:author_id],
projects_table[:name],
routes_table[:path]] routes_table[:path]]
super(*args) super(*args)

View file

@ -11,9 +11,7 @@ module Gitlab
mr_table[:id], mr_table[:id],
mr_table[:created_at], mr_table[:created_at],
mr_table[:state], mr_table[:state],
mr_table[:author_id], mr_table[:author_id]]
projects_table[:name],
routes_table[:path]]
super(*args) super(*args)
end end

View file

@ -10,12 +10,12 @@ describe AnalyticsIssueEntity do
id: "1", id: "1",
created_at: "2016-11-12 15:04:02.948604", created_at: "2016-11-12 15:04:02.948604",
author: user, author: user,
name: project.name, project_path: project.path,
path: project.namespace namespace_path: project.namespace.route.path
} }
end end
let(:project) { create(:project) } let(:project) { create(:project, name: 'my project') }
let(:request) { EntityRequest.new(entity: :merge_request) } let(:request) { EntityRequest.new(entity: :merge_request) }
let(:entity) do let(:entity) do

View file

@ -8,7 +8,7 @@ describe AnalyticsIssueSerializer do
end end
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project) } let(:project) { create(:project, name: 'my project') }
let(:resource) do let(:resource) do
{ {
total_time: "172802.724419", total_time: "172802.724419",
@ -17,8 +17,8 @@ describe AnalyticsIssueSerializer do
id: "1", id: "1",
created_at: "2016-11-12 15:04:02.948604", created_at: "2016-11-12 15:04:02.948604",
author: user, author: user,
name: project.name, project_path: project.path,
path: project.namespace namespace_path: project.namespace.route.path
} }
end end

View file

@ -8,7 +8,7 @@ describe AnalyticsMergeRequestSerializer do
end end
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project) } let(:project) { create(:project, name: 'my project') }
let(:resource) do let(:resource) do
{ {
total_time: "172802.724419", total_time: "172802.724419",
@ -18,8 +18,8 @@ describe AnalyticsMergeRequestSerializer do
state: 'open', state: 'open',
created_at: "2016-11-12 15:04:02.948604", created_at: "2016-11-12 15:04:02.948604",
author: user, author: user,
name: project.name, project_path: project.path,
path: project.namespace namespace_path: project.namespace.route.path
} }
end end