Module: CommitsHelper
- Included in:
- DiffFileEntity, Gitlab::BlamePresenter
- Defined in:
- app/helpers/commits_helper.rb
Constant Summary collapse
- DEFAULT_SHA =
'0000000'
Instance Method Summary collapse
- #cherry_pick_projects_data(project) ⇒ Object
-
#commit_author_link(commit, options = {}) ⇒ Object
Returns a link to the commit author.
-
#commit_branch_link(url, text) ⇒ Object
Returns a link formatted as a commit branch link.
-
#commit_branches_links(project, branches) ⇒ Object
Returns the sorted alphabetically links to branches, separated by a comma.
- #commit_committer_avatar(committer, options = {}) ⇒ Object
-
#commit_committer_link(commit, options = {}) ⇒ Object
Just like #author_link but for the committer.
-
#commit_default_branch(project, branches) ⇒ Object
Return Project default branch, if it present in array Else - first branch in array (mb last actual branch).
- #commit_options_dropdown_data(project, commit) ⇒ Object
-
#commit_partial_cache_key(commit, ref:, merge_request:, request:) ⇒ Object
This is used to calculate a cache key for the app/views/projects/commits/_commit.html.haml partial.
-
#commit_path_template(project) ⇒ Object
Returns the template path for commit resources to be utilized by the client applications.
-
#commit_tag_link(url, text) ⇒ Object
Returns a link formatted as a commit tag link.
-
#commit_tags_links(project, tags) ⇒ Object
Returns the sorted links to tags, separated by a comma.
- #commit_to_html(commit, ref, project) ⇒ Object
-
#commits_breadcrumbs ⇒ Object
Breadcrumb links for a Project and, if applicable, a tree path.
- #conditionally_paginate_diff_files(diffs, paginate:, page:, per:) ⇒ Object
- #diff_mode_swap_button(mode, file_hash) ⇒ Object
- #link_to_browse_code(project, commit) ⇒ Object
- #local_committed_date(commit, user) ⇒ Object
Instance Method Details
#cherry_pick_projects_data(project) ⇒ Object
156 157 158 159 160 161 162 163 164 |
# File 'app/helpers/commits_helper.rb', line 156 def cherry_pick_projects_data(project) [project, project.forked_from_project].compact.map do |project| { id: project.id.to_s, name: project.full_path, refsUrl: refs_project_path(project) } end end |
#commit_author_link(commit, options = {}) ⇒ Object
Returns a link to the commit author. If the author has a matching user and is a member of the current @project it will link to the team member page. Otherwise it will link to the author email as specified in the commit.
options:
avatar: true will prepend the avatar image
size: size of the avatar image in px
11 12 13 |
# File 'app/helpers/commits_helper.rb', line 11 def (commit, = {}) commit_person_link(commit, .merge(source: :author)) end |
#commit_branch_link(url, text) ⇒ Object
Returns a link formatted as a commit branch link
76 77 78 |
# File 'app/helpers/commits_helper.rb', line 76 def commit_branch_link(url, text) gl_badge_tag(text, { variant: :info, icon: 'branch' }, { href: url, class: 'gl-font-monospace gl-mb-1' }) end |
#commit_branches_links(project, branches) ⇒ Object
Returns the sorted alphabetically links to branches, separated by a comma
81 82 83 84 85 |
# File 'app/helpers/commits_helper.rb', line 81 def commit_branches_links(project, branches) branches.sort.map do |branch| commit_branch_link(project_ref_path(project, branch), branch) end.join(' ').html_safe end |
#commit_committer_avatar(committer, options = {}) ⇒ Object
20 21 22 23 24 25 26 27 |
# File 'app/helpers/commits_helper.rb', line 20 def commit_committer_avatar(committer, = {}) user_avatar(.merge({ user: committer, user_name: committer.name, user_email: committer.email, css_class: 'd-none d-sm-inline-block float-none gl-mr-0! gl-vertical-align-text-bottom' })) end |
#commit_committer_link(commit, options = {}) ⇒ Object
Just like #author_link but for the committer.
16 17 18 |
# File 'app/helpers/commits_helper.rb', line 16 def commit_committer_link(commit, = {}) commit_person_link(commit, .merge(source: :committer)) end |
#commit_default_branch(project, branches) ⇒ Object
Return Project default branch, if it present in array Else - first branch in array (mb last actual branch)
71 72 73 |
# File 'app/helpers/commits_helper.rb', line 71 def commit_default_branch(project, branches) branches.include?(project.default_branch) ? branches.delete(project.default_branch) : branches.pop end |
#commit_options_dropdown_data(project, commit) ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'app/helpers/commits_helper.rb', line 119 def (project, commit) can_collaborate = current_user && can_collaborate_with_project?(project) { new_project_tag_path: new_project_tag_path(project, ref: commit), email_patches_path: project_commit_path(project, commit, format: :patch), plain_diff_path: project_commit_path(project, commit, format: :diff), can_revert: (can_collaborate && !commit.has_been_reverted?(current_user)).to_s, can_cherry_pick: can_collaborate.to_s, can_tag: can?(current_user, :push_code, project).to_s, can_email_patches: (commit.parents.length < 2).to_s } end |
#commit_partial_cache_key(commit, ref:, merge_request:, request:) ⇒ Object
This is used to calculate a cache key for the app/views/projects/commits/_commit.html.haml partial. It takes some of the same parameters as used in the partial and will hash the current pipeline status.
This includes a keyed hash for values that can be nil, to prevent invalid cache entries being served if the order should change in future.
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'app/helpers/commits_helper.rb', line 172 def commit_partial_cache_key(commit, ref:, merge_request:, request:) [ commit, commit., ref, { merge_request: merge_request&.cache_key, pipeline_status: commit.detailed_status_for(ref)&.cache_key, xhr: request.xhr?, controller: controller.controller_path, path: @path, # referred to in #link_to_browse_code referenced_by: tag_checksum(commit.referenced_by) } ] end |
#commit_path_template(project) ⇒ Object
Returns the template path for commit resources to be utilized by the client applications.
192 193 194 |
# File 'app/helpers/commits_helper.rb', line 192 def commit_path_template(project) project_commit_path(project, DEFAULT_SHA).sub("/#{DEFAULT_SHA}", '/$COMMIT_SHA') end |
#commit_tag_link(url, text) ⇒ Object
Returns a link formatted as a commit tag link
88 89 90 |
# File 'app/helpers/commits_helper.rb', line 88 def commit_tag_link(url, text) gl_badge_tag(text, { variant: :info, icon: 'tag' }, { href: url, class: 'gl-font-monospace' }) end |
#commit_tags_links(project, tags) ⇒ Object
Returns the sorted links to tags, separated by a comma
93 94 95 96 97 98 |
# File 'app/helpers/commits_helper.rb', line 93 def (project, ) sorted = VersionSorter.rsort() sorted.map do |tag| commit_tag_link(project_ref_path(project, tag), tag) end.join(' ').html_safe end |
#commit_to_html(commit, ref, project) ⇒ Object
29 30 31 32 33 34 35 |
# File 'app/helpers/commits_helper.rb', line 29 def commit_to_html(commit, ref, project) render partial: 'projects/commits/commit', formats: :html, locals: { commit: commit, ref: ref, project: project } end |
#commits_breadcrumbs ⇒ Object
Breadcrumb links for a Project and, if applicable, a tree path
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'app/helpers/commits_helper.rb', line 38 def return unless @project && @ref # Add the root project link and the arrow icon crumbs = content_tag(:li, class: 'breadcrumb-item') do link_to( @project.path, project_commits_path(@project, @ref) ) end if @path parts = @path.split('/') parts.each_with_index do |part, i| crumbs << content_tag(:li, class: 'breadcrumb-item') do # The text is just the individual part, but the link needs all the parts before it link_to( part, project_commits_path( @project, tree_join(@ref, parts[0..i].join('/')) ) ) end end end crumbs.html_safe end |
#conditionally_paginate_diff_files(diffs, paginate:, page:, per:) ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'app/helpers/commits_helper.rb', line 133 def conditionally_paginate_diff_files(diffs, paginate:, page:, per:) if paginate diff_files = diffs.diff_files.to_a Gitlab::Utils::BatchLoader.clear_key([:repository_blobs, diffs.project.repository]) Kaminari.paginate_array(diff_files).page(page).per(per).tap do |diff_files| diff_files.each(&:add_blobs_to_batch_loader) end else diffs.diff_files end end |
#diff_mode_swap_button(mode, file_hash) ⇒ Object
196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'app/helpers/commits_helper.rb', line 196 def (mode, file_hash) icon = mode == 'raw' ? 'doc-code' : 'doc-text' entity = mode == 'raw' ? 'rawButton' : 'renderedButton' title = "Display #{mode} diff" render Pajamas::ButtonComponent.new( href: "##{mode}-diff-#{file_hash}", button_options: { title: title, class: "btn-file-option has-tooltip btn-show-#{mode}-diff", data: { file_hash: file_hash, diff_toggle_entity: entity } }) do sprite_icon(icon) end end |
#link_to_browse_code(project, commit) ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'app/helpers/commits_helper.rb', line 100 def link_to_browse_code(project, commit) return unless current_controller?(:commits) if @path.blank? url = project_tree_path(project, commit) tooltip = _("Browse Files") elsif @repo.blob_at(commit.id, @path) url = project_blob_path(project, tree_join(commit.id, @path)) tooltip = _("Browse File") elsif @path.present? url = project_tree_path(project, tree_join(commit.id, @path)) tooltip = _("Browse Directory") end render Pajamas::ButtonComponent.new(href: url, button_options: { title: tooltip, class: 'has-tooltip btn-icon', data: { container: 'body' } }) do sprite_icon('folder-open') end end |
#local_committed_date(commit, user) ⇒ Object
146 147 148 149 150 151 152 153 154 |
# File 'app/helpers/commits_helper.rb', line 146 def local_committed_date(commit, user) server_timezone = Time.zone user_timezone = user.timezone if user user_timezone = ActiveSupport::TimeZone.new(user_timezone) if user_timezone timezone = user_timezone || server_timezone commit.committed_date.in_time_zone(timezone).to_date end |