Commit 53726415 authored by Jacob Vosmaer's avatar Jacob Vosmaer

Merge branch 'lazy-blobs' into 'master'

Lazy Git blobs

To prevent madness like loading a 100MB file into Ruby's memory just
to decide whether it is binary or text.

See merge request !2663
parents 6cffcb05 d3affe8b
...@@ -49,7 +49,7 @@ gem "browser", '~> 1.0.0' ...@@ -49,7 +49,7 @@ gem "browser", '~> 1.0.0'
# Extracting information from a git repository # Extracting information from a git repository
# Provide access to Gitlab::Git library # Provide access to Gitlab::Git library
gem "gitlab_git", '~> 7.2.23' gem "gitlab_git", '~> 8.0.0'
# LDAP Auth # LDAP Auth
# GitLab fork with several improvements to original library. For full list of changes # GitLab fork with several improvements to original library. For full list of changes
......
...@@ -356,7 +356,7 @@ GEM ...@@ -356,7 +356,7 @@ GEM
posix-spawn (~> 0.3) posix-spawn (~> 0.3)
gitlab_emoji (0.2.0) gitlab_emoji (0.2.0)
gemojione (~> 2.1) gemojione (~> 2.1)
gitlab_git (7.2.24) gitlab_git (8.0.0)
activesupport (~> 4.0) activesupport (~> 4.0)
charlock_holmes (~> 0.7.3) charlock_holmes (~> 0.7.3)
github-linguist (~> 4.7.0) github-linguist (~> 4.7.0)
...@@ -934,7 +934,7 @@ DEPENDENCIES ...@@ -934,7 +934,7 @@ DEPENDENCIES
github-markup (~> 1.3.1) github-markup (~> 1.3.1)
gitlab-flowdock-git-hook (~> 1.0.1) gitlab-flowdock-git-hook (~> 1.0.1)
gitlab_emoji (~> 0.2.0) gitlab_emoji (~> 0.2.0)
gitlab_git (~> 7.2.23) gitlab_git (~> 8.0.0)
gitlab_meta (= 7.0) gitlab_meta (= 7.0)
gitlab_omniauth-ldap (~> 1.2.1) gitlab_omniauth-ldap (~> 1.2.1)
gollum-lib (~> 4.1.0) gollum-lib (~> 4.1.0)
......
...@@ -33,6 +33,7 @@ class Projects::BlobController < Projects::ApplicationController ...@@ -33,6 +33,7 @@ class Projects::BlobController < Projects::ApplicationController
def edit def edit
@last_commit = Gitlab::Git::Commit.last_for_path(@repository, @ref, @path).sha @last_commit = Gitlab::Git::Commit.last_for_path(@repository, @ref, @path).sha
blob.load_all_data!(@repository)
end end
def update def update
...@@ -51,6 +52,7 @@ class Projects::BlobController < Projects::ApplicationController ...@@ -51,6 +52,7 @@ class Projects::BlobController < Projects::ApplicationController
def preview def preview
@content = params[:content] @content = params[:content]
@blob.load_all_data!(@repository)
diffy = Diffy::Diff.new(@blob.data, @content, diff: '-U 3', include_diff_info: true) diffy = Diffy::Diff.new(@blob.data, @content, diff: '-U 3', include_diff_info: true)
diff_lines = diffy.diff.scan(/.*\n/)[2..-1] diff_lines = diffy.diff.scan(/.*\n/)[2..-1]
diff_lines = Gitlab::Diff::Parser.new.parse(diff_lines) diff_lines = Gitlab::Diff::Parser.new.parse(diff_lines)
......
...@@ -205,7 +205,11 @@ module Ci ...@@ -205,7 +205,11 @@ module Ci
end end
def ci_yaml_file def ci_yaml_file
@ci_yaml_file ||= project.repository.blob_at(sha, '.gitlab-ci.yml').data @ci_yaml_file ||= begin
blob = project.repository.blob_at(sha, '.gitlab-ci.yml')
blob.load_all_data!(project.repository)
blob.data
end
rescue rescue
nil nil
end end
......
...@@ -39,6 +39,8 @@ class Tree ...@@ -39,6 +39,8 @@ class Tree
git_repo = repository.raw_repository git_repo = repository.raw_repository
@readme = Gitlab::Git::Blob.find(git_repo, sha, readme_path) @readme = Gitlab::Git::Blob.find(git_repo, sha, readme_path)
@readme.load_all_data!(git_repo)
@readme
end end
def trees def trees
......
- blob.load_all_data!(@repository)
- if markup?(blob.name) - if markup?(blob.name)
.file-content.wiki .file-content.wiki
= render_markup(blob.name, blob.data) = render_markup(blob.name, blob.data)
......
...@@ -58,9 +58,11 @@ module API ...@@ -58,9 +58,11 @@ module API
commit = user_project.commit(ref) commit = user_project.commit(ref)
not_found! 'Commit' unless commit not_found! 'Commit' unless commit
blob = user_project.repository.blob_at(commit.sha, file_path) repo = user_project.repository
blob = repo.blob_at(commit.sha, file_path)
if blob if blob
blob.load_all_data!(repo)
status(200) status(200)
{ {
...@@ -72,7 +74,7 @@ module API ...@@ -72,7 +74,7 @@ module API
ref: ref, ref: ref,
blob_id: blob.id, blob_id: blob.id,
commit_id: commit.id, commit_id: commit.id,
last_commit_id: user_project.repository.last_commit_for_path(commit.sha, file_path).id last_commit_id: repo.last_commit_for_path(commit.sha, file_path).id
} }
else else
not_found! 'File' not_found! 'File'
......
...@@ -8,6 +8,7 @@ module Gitlab ...@@ -8,6 +8,7 @@ module Gitlab
blob = repository.blob_at(ref, file_name) blob = repository.blob_at(ref, file_name)
return [] unless blob return [] unless blob
blob.load_all_data!(repository)
highlight(file_name, blob.data).lines.map!(&:html_safe) highlight(file_name, blob.data).lines.map!(&:html_safe)
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