Skip to content
Snippets Groups Projects
Commit 43cc7189 authored by Douwe Maan's avatar Douwe Maan
Browse files

Merge branch 'mark-blobs-binary' into 'master'

Mark blobs as binary whenever this is known

This removes the need for using `Linguist::BlobHelper#binary?` whenever the binary status is already known, in turn reducing loading times of https://gitlab.com/nrclark/dummy_project/commit/81ebdea5df2fb42e59257cb3eaad671a5c53ca36 (by about 2-ish seconds locally).

See merge request !123
parents 750b9e73 3bc9611e
No related branches found
No related tags found
1 merge request!123Mark blobs as binary whenever this is known
Pipeline #
Loading
Loading
@@ -13,7 +13,7 @@ module Gitlab
# blob data should use load_all_data!.
MAX_DATA_DISPLAY_SIZE = 10485760
 
attr_accessor :name, :path, :size, :data, :mode, :id, :commit_id, :loaded_size
attr_accessor :name, :path, :size, :data, :mode, :id, :commit_id, :loaded_size, :binary
 
class << self
def find(repository, sha, path)
Loading
Loading
@@ -38,6 +38,7 @@ module Gitlab
mode: blob_entry[:filemode].to_s(8),
path: path,
commit_id: sha,
binary: blob.binary?
)
end
end
Loading
Loading
@@ -50,6 +51,7 @@ module Gitlab
id: blob.oid,
size: blob.size,
data: blob.content(MAX_DATA_DISPLAY_SIZE),
binary: blob.binary?
)
end
 
Loading
Loading
@@ -247,7 +249,7 @@ module Gitlab
end
 
def initialize(options)
%w(id name path size data mode commit_id).each do |key|
%w(id name path size data mode commit_id binary).each do |key|
self.send("#{key}=", options[key.to_sym])
end
 
Loading
Loading
@@ -256,6 +258,10 @@ module Gitlab
@loaded_size = @data.bytesize if @data
end
 
def binary?
@binary.nil? ? super : @binary == true
end
def empty?
!data || data == ''
end
Loading
Loading
Loading
Loading
@@ -38,6 +38,7 @@ describe Gitlab::Git::Blob do
it { expect(blob.data[0..10]).to eq("*.rbc\n*.sas") }
it { expect(blob.size).to eq(241) }
it { expect(blob.mode).to eq("100644") }
it { expect(blob).not_to be_binary }
end
 
context 'file in root with leading slash' do
Loading
Loading
@@ -68,6 +69,10 @@ describe Gitlab::Git::Blob do
blob.load_all_data!(repository)
expect(blob.data).to eq('')
end
it 'does not mark the blob as binary' do
expect(blob).not_to be_binary
end
end
 
context 'large file' do
Loading
Loading
@@ -85,6 +90,14 @@ describe Gitlab::Git::Blob do
blob.load_all_data!(repository)
expect(blob.data.length).to eq(blob_size)
end
it 'marks the blob as binary' do
expect(Gitlab::Git::Blob).to receive(:new).
with(hash_including(binary: true)).
and_call_original
expect(blob).to be_binary
end
end
end
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment