Commit 522c0197 authored by Phil Hughes's avatar Phil Hughes

Add LFS blob ID to GraphQL blob type

parent 25420de6
......@@ -135,6 +135,7 @@ export default {
:path="entry.flatPath"
:type="entry.type"
:url="entry.webUrl"
:lfs-oid="entry.lfsOid"
/>
</template>
</tbody>
......
<script>
import { GlBadge } from '@gitlab/ui';
import { getIconName } from '../../utils/icon';
import getRefMixin from '../../mixins/get_ref';
export default {
components: {
GlBadge,
},
mixins: [getRefMixin],
props: {
id: {
......@@ -26,6 +30,11 @@ export default {
required: false,
default: null,
},
lfsOid: {
type: String,
required: false,
default: null,
},
},
computed: {
routerLinkTo() {
......@@ -67,6 +76,9 @@ export default {
<component :is="linkComponent" :to="routerLinkTo" :href="url" class="str-truncated">
{{ fullPath }}
</component>
<gl-badge v-if="lfsOid" variant="default" class="label-lfs ml-1">
LFS
</gl-badge>
<template v-if="isSubmodule">
@ <a href="#" class="commit-sha">{{ shortSha }}</a>
</template>
......
......@@ -45,6 +45,7 @@ query getFiles(
node {
...TreeEntry
webUrl
lfsOid
}
}
pageInfo {
......
......@@ -9,6 +9,9 @@ module Types
graphql_name 'Blob'
field :web_url, GraphQL::STRING_TYPE, null: true
field :lfs_oid, GraphQL::STRING_TYPE, null: true, resolve: -> (blob, args, ctx) do
Gitlab::Graphql::Loaders::BatchCommitLoader.new(blob.repository, blob.id).find
end
end
end
end
# frozen_string_literal: true
class BlobPresenter < Gitlab::View::Presenter::Simple
class BlobPresenter < Gitlab::View::Presenter::Delegated
presents :blob
def highlight(plain: nil)
......
---
title: Add LFS oid to GraphQL blob type
merge_request: 28666
author:
type: added
# frozen_string_literal: true
module Gitlab
module Graphql
module Loaders
class BatchCommitLoader
def initialize(repository, blob_id)
@repository, @blob_id = repository, blob_id
end
def find
BatchLoader.for(blob_id).batch(key: repository) do |blob_ids, loader, batch_args|
Gitlab::Git::Blob.batch_lfs_pointers(batch_args[:key], blob_ids).each do |loaded_blob|
loader.call(loaded_blob.id, loaded_blob.lfs_oid)
end
end
end
private
attr_reader :repository, :blob_id
end
end
end
end
......@@ -22,6 +22,8 @@ exports[`Repository table row component renders table row 1`] = `
</a>
<!---->
<!---->
</td>
<td
......
import { shallowMount, RouterLinkStub } from '@vue/test-utils';
import { GlBadge } from '@gitlab/ui';
import TableRow from '~/repository/components/table/row.vue';
let vm;
......@@ -98,4 +99,16 @@ describe('Repository table row component', () => {
expect(vm.find('a').attributes('href')).toEqual('https://test.com');
});
it('renders LFS badge', () => {
factory({
id: '1',
path: 'test',
type: 'commit',
currentPath: '/',
lfsOid: '1',
});
expect(vm.find(GlBadge).exists()).toBe(true);
});
});
......@@ -5,5 +5,5 @@ require 'spec_helper'
describe Types::Tree::BlobType do
it { expect(described_class.graphql_name).to eq('Blob') }
it { expect(described_class).to have_graphql_fields(:id, :name, :type, :path, :flat_path, :web_url) }
it { expect(described_class).to have_graphql_fields(:id, :name, :type, :path, :flat_path, :web_url, :lfs_oid) }
end
require 'spec_helper'
describe Gitlab::Graphql::Loaders::BatchCommitLoader do
include GraphqlHelpers
set(:project) { create(:project, :repository) }
let(:repository) { project.repository }
let(:blob) { Gitlab::Graphql::Representation::TreeEntry.new(repository.blob_at('master', 'files/lfs/lfs_object.iso'), repository) }
let(:otherblob) { Gitlab::Graphql::Representation::TreeEntry.new(repository.blob_at('master', 'README'), repository) }
describe '#find' do
it 'batch-resolves LFS blob IDs' do
expect(Gitlab::Git::Blob).to receive(:batch_lfs_pointers).once.and_call_original
result = batch do
[blob, otherblob].map { |b| described_class.new(repository, b.id).find }
end
expect(result.first).to eq(blob.lfs_oid)
expect(result.last).to eq(nil)
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment