Fix error on project name
Add project path to sql query to build proper path
This commit is contained in:
parent
1dfbb27f6e
commit
6c5e948013
13 changed files with 43 additions and 31 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -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]))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue