diff --git a/app/assets/javascripts/repository/components/blob_button_group.vue b/app/assets/javascripts/repository/components/blob_button_group.vue index 99b861ca104091196f3ea94e668d4b9891106d47..0a14544e11406e975863572cdd83be2cb2dfa0e3 100644 --- a/app/assets/javascripts/repository/components/blob_button_group.vue +++ b/app/assets/javascripts/repository/components/blob_button_group.vue @@ -14,6 +14,7 @@ export default { replace: __('Replace'), replacePrimaryBtnText: __('Replace file'), delete: __('Delete'), + blame: __('Blame'), }, components: { GlButtonGroup, @@ -129,6 +130,9 @@ export default { {{ $options.i18n.delete }} + + {{ $options.i18n.blame }} + @@ -329,6 +333,7 @@ export default { :show-fork-suggestion="showForkSuggestion" :is-using-lfs="isUsingLfs" @fork="setForkTarget('view')" + @blame="handleToggleBlame" /> @@ -354,6 +359,7 @@ export default { v-else :blob="blobInfo" :chunks="chunks" + :show-blame="showBlame" :project-path="projectPath" :current-ref="currentRef" class="blob-viewer" diff --git a/app/assets/javascripts/vue_shared/components/source_viewer/components/blame_info.vue b/app/assets/javascripts/vue_shared/components/source_viewer/components/blame_info.vue new file mode 100644 index 0000000000000000000000000000000000000000..11046f9e8c640c1d6559d20470fba750ba863550 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/source_viewer/components/blame_info.vue @@ -0,0 +1,125 @@ + + diff --git a/app/assets/javascripts/vue_shared/components/source_viewer/queries/blame_data.query.graphql b/app/assets/javascripts/vue_shared/components/source_viewer/queries/blame_data.query.graphql new file mode 100644 index 0000000000000000000000000000000000000000..18a5009030a2dc796848d26547f0389caf0a7e9d --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/source_viewer/queries/blame_data.query.graphql @@ -0,0 +1,35 @@ +query getBlameData($fullPath: ID!, $filePath: String!, $fromLine: Int, $toLine: Int) { + project(fullPath: $fullPath) { + repository { + blobs(paths: [$filePath]) { + nodes { + blame(fromLine: $fromLine, toLine: $toLine) { + firstLine + groups { + lineno + span + commit { + message + authoredDate + author { + name + webPath + avatarUrl + } + sha + } + commitData { + authorAvatar + ageMapClass + commitLink + commitAuthorLink + projectBlameLink + timeAgoTooltip + } + } + } + } + } + } + } +} diff --git a/app/assets/javascripts/vue_shared/components/source_viewer/source_viewer_new.vue b/app/assets/javascripts/vue_shared/components/source_viewer/source_viewer_new.vue index c7353ed6785e49081349673f956ace17d859f962..bbdf1e556315441a8db6714c2ca63c8cd3131b4b 100644 --- a/app/assets/javascripts/vue_shared/components/source_viewer/source_viewer_new.vue +++ b/app/assets/javascripts/vue_shared/components/source_viewer/source_viewer_new.vue @@ -1,10 +1,13 @@ diff --git a/app/assets/stylesheets/framework/files.scss b/app/assets/stylesheets/framework/files.scss index 613e504c771e1a2e88d8562e4aa94d370aaa3808..aa6f38f1a3a6f8ebfa06ce754522e89455f01ab5 100644 --- a/app/assets/stylesheets/framework/files.scss +++ b/app/assets/stylesheets/framework/files.scss @@ -507,6 +507,7 @@ span.idiff { } .blame { + background: #fbfafd; position: relative; .tr {