Build project cache key in a helper
This commit is contained in:
parent
901e70fba1
commit
7d5b8993f4
5 changed files with 59 additions and 2 deletions
|
@ -59,6 +59,10 @@ module CiStatusHelper
|
|||
custom_icon(icon_name)
|
||||
end
|
||||
|
||||
def pipeline_status_cache_key(pipeline_status)
|
||||
"pipeline-status/#{pipeline_status.sha}-#{pipeline_status.status}"
|
||||
end
|
||||
|
||||
def render_project_pipeline_status(pipeline_status, tooltip_placement: 'auto left')
|
||||
project = pipeline_status.project
|
||||
path = pipelines_namespace_project_commit_path(
|
||||
|
|
|
@ -159,6 +159,13 @@ module ProjectsHelper
|
|||
choose a GitLab CI Yaml template and commit your changes. #{link_to_autodeploy_doc}".html_safe
|
||||
end
|
||||
|
||||
def project_list_cache_key(project)
|
||||
key = [project.namespace.cache_key, project.cache_key, controller.controller_name, controller.action_name, current_application_settings.cache_key, 'v2.3']
|
||||
key << pipeline_status_cache_key(project.pipeline_status) if project.pipeline_status.has_status?
|
||||
|
||||
key
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def repo_children_classes(field)
|
||||
|
|
|
@ -6,8 +6,7 @@
|
|||
- css_class = '' unless local_assigns[:css_class]
|
||||
- show_last_commit_as_description = false unless local_assigns[:show_last_commit_as_description] == true && project.commit
|
||||
- css_class += " no-description" if project.description.blank? && !show_last_commit_as_description
|
||||
- cache_key = [project.namespace.cache_key, project.cache_key, controller.controller_name, controller.action_name, current_application_settings.cache_key, 'v2.3']
|
||||
- cache_key.push "pipeline-status/#{project.pipeline_status.sha}-#{project.pipeline_status.status}" if project.pipeline_status.has_status?
|
||||
- cache_key = project_list_cache_key(project)
|
||||
|
||||
%li.project-row{ class: css_class }
|
||||
= cache(cache_key) do
|
||||
|
|
|
@ -16,4 +16,11 @@ describe CiStatusHelper do
|
|||
helper.ci_icon_for_status(failed_commit.status)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#pipeline_status_cache_key" do
|
||||
it "builds a cache key for pipeline status" do
|
||||
pipeline_status = Ci::PipelineStatus.new(build(:project), sha: "123abc", status: "success")
|
||||
expect(helper.pipeline_status_cache_key(pipeline_status)).to eq("pipeline-status/123abc-success")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -63,6 +63,46 @@ describe ProjectsHelper do
|
|||
end
|
||||
end
|
||||
|
||||
describe "#project_list_cache_key" do
|
||||
let(:project) { create(:project) }
|
||||
|
||||
it "includes the namespace" do
|
||||
expect(helper.project_list_cache_key(project)).to include(project.namespace.cache_key)
|
||||
end
|
||||
|
||||
it "includes the project" do
|
||||
expect(helper.project_list_cache_key(project)).to include(project.cache_key)
|
||||
end
|
||||
|
||||
it "includes the controller name" do
|
||||
expect(helper.controller).to receive(:controller_name).and_return("testcontroller")
|
||||
|
||||
expect(helper.project_list_cache_key(project)).to include("testcontroller")
|
||||
end
|
||||
|
||||
it "includes the controller action" do
|
||||
expect(helper.controller).to receive(:action_name).and_return("testaction")
|
||||
|
||||
expect(helper.project_list_cache_key(project)).to include("testaction")
|
||||
end
|
||||
|
||||
it "includes the application settings" do
|
||||
settings = Gitlab::CurrentSettings.current_application_settings
|
||||
|
||||
expect(helper.project_list_cache_key(project)).to include(settings.cache_key)
|
||||
end
|
||||
|
||||
it "includes a version" do
|
||||
expect(helper.project_list_cache_key(project)).to include("v2.3")
|
||||
end
|
||||
|
||||
it "includes the pipeline status when there is a status" do
|
||||
create(:ci_pipeline, :success, project: project, sha: project.commit.sha)
|
||||
|
||||
expect(helper.project_list_cache_key(project)).to include("pipeline-status/#{project.commit.sha}-success")
|
||||
end
|
||||
end
|
||||
|
||||
describe 'link_to_member' do
|
||||
let(:group) { create(:group) }
|
||||
let(:project) { create(:empty_project, group: group) }
|
||||
|
|
Loading…
Reference in a new issue