Commit 7527408a authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'feature/base64_content' into 'master'

Feature: base64 encoding for blob content
parents dba98240 1c4870c5
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
text-align: center; text-align: center;
img { img {
padding: 100px; padding: 100px;
max-width: 300px; max-width: 50%;
} }
} }
......
...@@ -33,7 +33,8 @@ module Files ...@@ -33,7 +33,8 @@ module Files
new_file_action = Gitlab::Satellite::NewFileAction.new(current_user, project, ref, file_path) new_file_action = Gitlab::Satellite::NewFileAction.new(current_user, project, ref, file_path)
created_successfully = new_file_action.commit!( created_successfully = new_file_action.commit!(
params[:content], params[:content],
params[:commit_message] params[:commit_message],
params[:encoding]
) )
if created_successfully if created_successfully
......
...@@ -23,10 +23,11 @@ module Files ...@@ -23,10 +23,11 @@ module Files
return error("You can only edit text files") return error("You can only edit text files")
end end
new_file_action = Gitlab::Satellite::EditFileAction.new(current_user, project, ref, path) edit_file_action = Gitlab::Satellite::EditFileAction.new(current_user, project, ref, path)
created_successfully = new_file_action.commit!( created_successfully = edit_file_action.commit!(
params[:content], params[:content],
params[:commit_message] params[:commit_message],
params[:encoding]
) )
if created_successfully if created_successfully
......
...@@ -14,6 +14,12 @@ ...@@ -14,6 +14,12 @@
on on
%span= @ref %span= @ref
.form-group.commit_message-group
= label_tag :encoding, class: "control-label" do
Encoding
.col-sm-10
= select_tag :encoding, options_for_select([ "base64", "text" ], "text"), class: 'form-control'
.form-group.commit_message-group .form-group.commit_message-group
= label_tag 'commit_message', class: "control-label" do = label_tag 'commit_message', class: "control-label" do
Commit message Commit message
......
...@@ -400,6 +400,7 @@ Parameters: ...@@ -400,6 +400,7 @@ Parameters:
+ `file_path` (optional) - Full path to new file. Ex. lib/class.rb + `file_path` (optional) - Full path to new file. Ex. lib/class.rb
+ `branch_name` (required) - The name of branch + `branch_name` (required) - The name of branch
+ `encoding` (optional) - 'text' or 'base64'. Text is default.
+ `content` (required) - File content + `content` (required) - File content
+ `commit_message` (required) - Commit message + `commit_message` (required) - Commit message
...@@ -413,6 +414,7 @@ Parameters: ...@@ -413,6 +414,7 @@ Parameters:
+ `file_path` (required) - Full path to file. Ex. lib/class.rb + `file_path` (required) - Full path to file. Ex. lib/class.rb
+ `branch_name` (required) - The name of branch + `branch_name` (required) - The name of branch
+ `encoding` (optional) - 'text' or 'base64'. Text is default.
+ `content` (required) - New file content + `content` (required) - New file content
+ `commit_message` (required) - Commit message + `commit_message` (required) - Commit message
......
...@@ -18,7 +18,7 @@ module API ...@@ -18,7 +18,7 @@ module API
# #
post ":id/repository/files" do post ":id/repository/files" do
required_attributes! [:file_path, :branch_name, :content, :commit_message] required_attributes! [:file_path, :branch_name, :content, :commit_message]
attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message] attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message, :encoding]
branch_name = attrs.delete(:branch_name) branch_name = attrs.delete(:branch_name)
file_path = attrs.delete(:file_path) file_path = attrs.delete(:file_path)
result = ::Files::CreateContext.new(user_project, current_user, attrs, branch_name, file_path).execute 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
# #
put ":id/repository/files" do put ":id/repository/files" do
required_attributes! [:file_path, :branch_name, :content, :commit_message] required_attributes! [:file_path, :branch_name, :content, :commit_message]
attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message] attrs = attributes_for_keys [:file_path, :branch_name, :content, :commit_message, :encoding]
branch_name = attrs.delete(:branch_name) branch_name = attrs.delete(:branch_name)
file_path = attrs.delete(:file_path) file_path = attrs.delete(:file_path)
result = ::Files::UpdateContext.new(user_project, current_user, attrs, branch_name, file_path).execute result = ::Files::UpdateContext.new(user_project, current_user, attrs, branch_name, file_path).execute
......
...@@ -10,7 +10,7 @@ module Gitlab ...@@ -10,7 +10,7 @@ module Gitlab
# Returns false if committing the change fails # Returns false if committing the change fails
# Returns false if pushing from the satellite to bare repo failed or was rejected # Returns false if pushing from the satellite to bare repo failed or was rejected
# Returns true otherwise # Returns true otherwise
def commit!(content, commit_message) def commit!(content, commit_message, encoding)
in_locked_and_timed_satellite do |repo| in_locked_and_timed_satellite do |repo|
prepare_satellite!(repo) prepare_satellite!(repo)
...@@ -26,7 +26,8 @@ module Gitlab ...@@ -26,7 +26,8 @@ module Gitlab
return false return false
end end
File.open(file_path_in_satellite, 'w') { |f| f.write(content) } # Write file
write_file(file_path_in_satellite, content, encoding)
# commit the changes # commit the changes
# will raise CommandFailed when commit fails # will raise CommandFailed when commit fails
......
...@@ -12,6 +12,14 @@ module Gitlab ...@@ -12,6 +12,14 @@ module Gitlab
def safe_path?(path) def safe_path?(path)
File.absolute_path(path) == path File.absolute_path(path) == path
end end
def write_file(abs_file_path, content, file_encoding = 'text')
if file_encoding == 'base64'
File.open(abs_file_path, 'wb') { |f| f.write(Base64.decode64(content)) }
else
File.open(abs_file_path, 'w') { |f| f.write(content) }
end
end
end end
end end
end end
...@@ -9,7 +9,7 @@ module Gitlab ...@@ -9,7 +9,7 @@ module Gitlab
# Returns false if committing the change fails # Returns false if committing the change fails
# Returns false if pushing from the satellite to bare repo failed or was rejected # Returns false if pushing from the satellite to bare repo failed or was rejected
# Returns true otherwise # Returns true otherwise
def commit!(content, commit_message) def commit!(content, commit_message, encoding)
in_locked_and_timed_satellite do |repo| in_locked_and_timed_satellite do |repo|
prepare_satellite!(repo) prepare_satellite!(repo)
...@@ -29,7 +29,7 @@ module Gitlab ...@@ -29,7 +29,7 @@ module Gitlab
FileUtils.mkdir_p(dir_name_in_satellite) FileUtils.mkdir_p(dir_name_in_satellite)
# Write file # Write file
File.open(file_path_in_satellite, 'w') { |f| f.write(content) } write_file(file_path_in_satellite, content, encoding)
# add new file # add new file
repo.add(file_path_in_satellite) repo.add(file_path_in_satellite)
......
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