Commit 7527408ad0c72ea7b7aba5c14550c5b08b6aae60

Authored by Dmitriy Zaporozhets
2 parents dba98240 1c4870c5

Merge branch 'feature/base64_content' into 'master'

Feature: base64 encoding for blob content
app/assets/stylesheets/generic/files.scss
@@ -45,7 +45,7 @@ @@ -45,7 +45,7 @@
45 text-align: center; 45 text-align: center;
46 img { 46 img {
47 padding: 100px; 47 padding: 100px;
48 - max-width: 300px; 48 + max-width: 50%;
49 } 49 }
50 } 50 }
51 51
app/contexts/files/create_context.rb
@@ -33,7 +33,8 @@ module Files @@ -33,7 +33,8 @@ module Files
33 new_file_action = Gitlab::Satellite::NewFileAction.new(current_user, project, ref, file_path) 33 new_file_action = Gitlab::Satellite::NewFileAction.new(current_user, project, ref, file_path)
34 created_successfully = new_file_action.commit!( 34 created_successfully = new_file_action.commit!(
35 params[:content], 35 params[:content],
36 - params[:commit_message] 36 + params[:commit_message],
  37 + params[:encoding]
37 ) 38 )
38 39
39 if created_successfully 40 if created_successfully
app/contexts/files/update_context.rb
@@ -23,10 +23,11 @@ module Files @@ -23,10 +23,11 @@ module Files
23 return error("You can only edit text files") 23 return error("You can only edit text files")
24 end 24 end
25 25
26 - new_file_action = Gitlab::Satellite::EditFileAction.new(current_user, project, ref, path)  
27 - created_successfully = new_file_action.commit!( 26 + edit_file_action = Gitlab::Satellite::EditFileAction.new(current_user, project, ref, path)
  27 + created_successfully = edit_file_action.commit!(
28 params[:content], 28 params[:content],
29 - params[:commit_message] 29 + params[:commit_message],
  30 + params[:encoding]
30 ) 31 )
31 32
32 if created_successfully 33 if created_successfully
app/views/projects/new_tree/show.html.haml
@@ -15,6 +15,12 @@ @@ -15,6 +15,12 @@
15 %span= @ref 15 %span= @ref
16 16
17 .form-group.commit_message-group 17 .form-group.commit_message-group
  18 + = label_tag :encoding, class: "control-label" do
  19 + Encoding
  20 + .col-sm-10
  21 + = select_tag :encoding, options_for_select([ "base64", "text" ], "text"), class: 'form-control'
  22 +
  23 + .form-group.commit_message-group
18 = label_tag 'commit_message', class: "control-label" do 24 = label_tag 'commit_message', class: "control-label" do
19 Commit message 25 Commit message
20 .col-sm-10 26 .col-sm-10
doc/api/repositories.md
@@ -400,6 +400,7 @@ Parameters: @@ -400,6 +400,7 @@ Parameters:
400 400
401 + `file_path` (optional) - Full path to new file. Ex. lib/class.rb 401 + `file_path` (optional) - Full path to new file. Ex. lib/class.rb
402 + `branch_name` (required) - The name of branch 402 + `branch_name` (required) - The name of branch
  403 ++ `encoding` (optional) - 'text' or 'base64'. Text is default.
403 + `content` (required) - File content 404 + `content` (required) - File content
404 + `commit_message` (required) - Commit message 405 + `commit_message` (required) - Commit message
405 406
@@ -413,6 +414,7 @@ Parameters: @@ -413,6 +414,7 @@ Parameters:
413 414
414 + `file_path` (required) - Full path to file. Ex. lib/class.rb 415 + `file_path` (required) - Full path to file. Ex. lib/class.rb
415 + `branch_name` (required) - The name of branch 416 + `branch_name` (required) - The name of branch
  417 ++ `encoding` (optional) - 'text' or 'base64'. Text is default.
416 + `content` (required) - New file content 418 + `content` (required) - New file content
417 + `commit_message` (required) - Commit message 419 + `commit_message` (required) - Commit message
418 420
lib/api/files.rb
@@ -18,7 +18,7 @@ module API @@ -18,7 +18,7 @@ module API
18 # 18 #
19 post ":id/repository/files" do 19 post ":id/repository/files" do
20 required_attributes! [:file_path, :branch_name, :content, :commit_message] 20 required_attributes! [:file_path, :branch_name, :content, :commit_message]
21 - attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message] 21 + attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message, :encoding]
22 branch_name = attrs.delete(:branch_name) 22 branch_name = attrs.delete(:branch_name)
23 file_path = attrs.delete(:file_path) 23 file_path = attrs.delete(:file_path)
24 result = ::Files::CreateContext.new(user_project, current_user, attrs, branch_name, file_path).execute 24 result = ::Files::CreateContext.new(user_project, current_user, attrs, branch_name, file_path).execute
@@ -48,7 +48,7 @@ module API @@ -48,7 +48,7 @@ module API
48 # 48 #
49 put ":id/repository/files" do 49 put ":id/repository/files" do
50 required_attributes! [:file_path, :branch_name, :content, :commit_message] 50 required_attributes! [:file_path, :branch_name, :content, :commit_message]
51 - attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message] 51 + attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message, :encoding]
52 branch_name = attrs.delete(:branch_name) 52 branch_name = attrs.delete(:branch_name)
53 file_path = attrs.delete(:file_path) 53 file_path = attrs.delete(:file_path)
54 result = ::Files::UpdateContext.new(user_project, current_user, attrs, branch_name, file_path).execute 54 result = ::Files::UpdateContext.new(user_project, current_user, attrs, branch_name, file_path).execute
lib/gitlab/satellite/files/edit_file_action.rb
@@ -10,7 +10,7 @@ module Gitlab @@ -10,7 +10,7 @@ module Gitlab
10 # Returns false if committing the change fails 10 # Returns false if committing the change fails
11 # Returns false if pushing from the satellite to bare repo failed or was rejected 11 # Returns false if pushing from the satellite to bare repo failed or was rejected
12 # Returns true otherwise 12 # Returns true otherwise
13 - def commit!(content, commit_message) 13 + def commit!(content, commit_message, encoding)
14 in_locked_and_timed_satellite do |repo| 14 in_locked_and_timed_satellite do |repo|
15 prepare_satellite!(repo) 15 prepare_satellite!(repo)
16 16
@@ -26,7 +26,8 @@ module Gitlab @@ -26,7 +26,8 @@ module Gitlab
26 return false 26 return false
27 end 27 end
28 28
29 - File.open(file_path_in_satellite, 'w') { |f| f.write(content) } 29 + # Write file
  30 + write_file(file_path_in_satellite, content, encoding)
30 31
31 # commit the changes 32 # commit the changes
32 # will raise CommandFailed when commit fails 33 # will raise CommandFailed when commit fails
lib/gitlab/satellite/files/file_action.rb
@@ -12,6 +12,14 @@ module Gitlab @@ -12,6 +12,14 @@ module Gitlab
12 def safe_path?(path) 12 def safe_path?(path)
13 File.absolute_path(path) == path 13 File.absolute_path(path) == path
14 end 14 end
  15 +
  16 + def write_file(abs_file_path, content, file_encoding = 'text')
  17 + if file_encoding == 'base64'
  18 + File.open(abs_file_path, 'wb') { |f| f.write(Base64.decode64(content)) }
  19 + else
  20 + File.open(abs_file_path, 'w') { |f| f.write(content) }
  21 + end
  22 + end
15 end 23 end
16 end 24 end
17 end 25 end
lib/gitlab/satellite/files/new_file_action.rb
@@ -9,7 +9,7 @@ module Gitlab @@ -9,7 +9,7 @@ module Gitlab
9 # Returns false if committing the change fails 9 # Returns false if committing the change fails
10 # Returns false if pushing from the satellite to bare repo failed or was rejected 10 # Returns false if pushing from the satellite to bare repo failed or was rejected
11 # Returns true otherwise 11 # Returns true otherwise
12 - def commit!(content, commit_message) 12 + def commit!(content, commit_message, encoding)
13 in_locked_and_timed_satellite do |repo| 13 in_locked_and_timed_satellite do |repo|
14 prepare_satellite!(repo) 14 prepare_satellite!(repo)
15 15
@@ -29,7 +29,7 @@ module Gitlab @@ -29,7 +29,7 @@ module Gitlab
29 FileUtils.mkdir_p(dir_name_in_satellite) 29 FileUtils.mkdir_p(dir_name_in_satellite)
30 30
31 # Write file 31 # Write file
32 - File.open(file_path_in_satellite, 'w') { |f| f.write(content) } 32 + write_file(file_path_in_satellite, content, encoding)
33 33
34 # add new file 34 # add new file
35 repo.add(file_path_in_satellite) 35 repo.add(file_path_in_satellite)