From 77cec14e7eb30686812a36d8109ef7a64380fdad Mon Sep 17 00:00:00 2001 From: Nick Thomas Date: Mon, 6 May 2019 12:51:50 +0000 Subject: [PATCH] Merge branch '61203-fix-lfs-ui-upload' into 'master' Fix uploading of LFS tracked file through UI Closes #61203 See merge request gitlab-org/gitlab-ce!28052 (cherry picked from commit 4d2d812463256003ab943df90a9c603821078a69) 3f192e8a Fix Lfs::FileTransformer to work with file objects 48fcdf1f Add changelog entry --- app/services/lfs/file_transformer.rb | 9 ++++++++- .../unreleased/61203-fix-lfs-ui-upload.yml | 5 +++++ spec/services/lfs/file_transformer_spec.rb | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/61203-fix-lfs-ui-upload.yml diff --git a/app/services/lfs/file_transformer.rb b/app/services/lfs/file_transformer.rb index 6ecf583cb6a..5239fe1b6e3 100644 --- a/app/services/lfs/file_transformer.rb +++ b/app/services/lfs/file_transformer.rb @@ -24,7 +24,7 @@ module Lfs def new_file(file_path, file_content, encoding: nil) if project.lfs_enabled? && lfs_file?(file_path) - file_content = Base64.decode64(file_content) if encoding == 'base64' + file_content = parse_file_content(file_content, encoding: encoding) lfs_pointer_file = Gitlab::Git::LfsPointerFile.new(file_content) lfs_object = create_lfs_object!(lfs_pointer_file, file_content) @@ -66,5 +66,12 @@ module Lfs def link_lfs_object!(lfs_object) project.lfs_objects << lfs_object end + + def parse_file_content(file_content, encoding: nil) + return file_content.read if file_content.respond_to?(:read) + return Base64.decode64(file_content) if encoding == 'base64' + + file_content + end end end diff --git a/changelogs/unreleased/61203-fix-lfs-ui-upload.yml b/changelogs/unreleased/61203-fix-lfs-ui-upload.yml new file mode 100644 index 00000000000..66afe9f0597 --- /dev/null +++ b/changelogs/unreleased/61203-fix-lfs-ui-upload.yml @@ -0,0 +1,5 @@ +--- +title: Fix uploading of LFS tracked file through UI +merge_request: 28052 +author: +type: fixed diff --git a/spec/services/lfs/file_transformer_spec.rb b/spec/services/lfs/file_transformer_spec.rb index e8938338cb7..9b1a64ee050 100644 --- a/spec/services/lfs/file_transformer_spec.rb +++ b/spec/services/lfs/file_transformer_spec.rb @@ -62,6 +62,25 @@ describe Lfs::FileTransformer do expect(result.encoding).to eq('text') end + context 'when an actual file is passed' do + let(:file) { Tempfile.new(file_path) } + + before do + file.write(file_content) + file.rewind + end + + after do + file.unlink + end + + it "creates an LfsObject with the file's content" do + subject.new_file(file_path, file) + + expect(LfsObject.last.file.read).to eq file_content + end + end + context "when doesn't use LFS" do let(:file_path) { 'other.filetype' } -- GitLab