Commit 7527408ad0c72ea7b7aba5c14550c5b08b6aae60
Exists in
spb-stable
and in
3 other branches
Merge branch 'feature/base64_content' into 'master'
Feature: base64 encoding for blob content
Showing
9 changed files
with
30 additions
and
11 deletions
Show diff stats
app/assets/stylesheets/generic/files.scss
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) |