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