Refactor EditFileAction#update and rename it to commit!
This commit is contained in:
parent
3080127354
commit
700a784bc9
2 changed files with 24 additions and 14 deletions
|
@ -26,14 +26,14 @@ class TreeController < ProjectResourceController
|
|||
end
|
||||
|
||||
def update
|
||||
file_editor = Gitlab::Satellite::EditFileAction.new(current_user, @project, @ref, @path)
|
||||
update_status = file_editor.update(
|
||||
edit_file_action = Gitlab::Satellite::EditFileAction.new(current_user, @project, @ref, @path)
|
||||
updated_successfully = edit_file_action.commit!(
|
||||
params[:content],
|
||||
params[:commit_message],
|
||||
params[:last_commit]
|
||||
)
|
||||
|
||||
if update_status
|
||||
if updated_successfully
|
||||
redirect_to project_tree_path(@project, @id), notice: "Your changes have been successfully commited"
|
||||
else
|
||||
flash[:notice] = "Your changes could not be commited, because the file has been changed"
|
||||
|
|
|
@ -5,25 +5,35 @@ module Gitlab
|
|||
# It gives you ability to make changes to files
|
||||
# & commit this changes from GitLab UI.
|
||||
class EditFileAction < Action
|
||||
attr_accessor :path, :ref
|
||||
attr_accessor :file_path, :ref
|
||||
|
||||
def initialize(user, project, ref, path)
|
||||
super user, project
|
||||
@path = path
|
||||
def initialize(user, project, ref, file_path)
|
||||
super user, project, git_timeout: 10.seconds
|
||||
@file_path = file_path
|
||||
@ref = ref
|
||||
end
|
||||
|
||||
def update(content, commit_message, last_commit)
|
||||
def commit!(content, commit_message, last_commit)
|
||||
return false unless can_edit?(last_commit)
|
||||
|
||||
in_locked_and_timed_satellite do |repo|
|
||||
prepare_satellite!(repo)
|
||||
|
||||
repo.git.sh "git checkout -b #{ref} origin/#{ref}"
|
||||
File.open(path, 'w'){|f| f.write(content)}
|
||||
repo.git.sh "git add ."
|
||||
repo.git.sh "git commit -am '#{commit_message}'"
|
||||
output = repo.git.sh "git push origin #{ref}"
|
||||
# create target branch in satellite at the corresponding commit from Gitolite
|
||||
repo.git.checkout({raise: true, timeout: true, b: true}, ref, "origin/#{ref}")
|
||||
|
||||
# update the file in the satellite's working dir
|
||||
file_path_in_satellite = File.join(repo.working_dir, file_path)
|
||||
File.open(file_path_in_satellite, 'w') { |f| f.write(content) }
|
||||
|
||||
# commit the changes
|
||||
# will raise CommandFailed when commit fails
|
||||
repo.git.commit(raise: true, timeout: true, a: true, m: commit_message)
|
||||
|
||||
|
||||
# push commit back to Gitolite
|
||||
# will raise CommandFailed when push fails
|
||||
repo.git.push({raise: true, timeout: true}, :origin, ref)
|
||||
|
||||
# everything worked
|
||||
true
|
||||
|
@ -36,7 +46,7 @@ module Gitlab
|
|||
protected
|
||||
|
||||
def can_edit?(last_commit)
|
||||
current_last_commit = @project.last_commit_for(ref, path).sha
|
||||
current_last_commit = @project.last_commit_for(ref, file_path).sha
|
||||
last_commit == current_last_commit
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue