Commit 55779b00 authored by Riyad Preukschas's avatar Riyad Preukschas

Rename Gitlab::FileEditor to Gitlab::Satellite::EditFileAction

parent 8c89beb6
...@@ -26,7 +26,7 @@ class TreeController < ProjectResourceController ...@@ -26,7 +26,7 @@ class TreeController < ProjectResourceController
end end
def update def update
file_editor = Gitlab::FileEditor.new(current_user, @project, @ref) file_editor = Gitlab::Satellite::EditFileAction.new(current_user, @project, @ref)
update_status = file_editor.update( update_status = file_editor.update(
@path, @path,
params[:content], params[:content],
......
module Gitlab
# GitLab file editor
#
# It gives you ability to make changes to files
# & commit this changes from GitLab UI.
class FileEditor
attr_accessor :user, :project, :ref
def initialize(user, project, ref)
self.user = user
self.project = project
self.ref = ref
end
def update(path, content, commit_message, last_commit)
return false unless can_edit?(path, last_commit)
Grit::Git.with_timeout(10.seconds) do
lock_file = Rails.root.join("tmp", "#{project.path}.lock")
File.open(lock_file, "w+") do |f|
f.flock(File::LOCK_EX)
unless project.satellite.exists?
raise "Satellite doesn't exist"
end
project.satellite.clear
Dir.chdir(project.satellite.path) do
r = Grit::Repo.new('.')
r.git.sh "git reset --hard"
r.git.sh "git fetch origin"
r.git.sh "git config user.name \"#{user.name}\""
r.git.sh "git config user.email \"#{user.email}\""
r.git.sh "git checkout -b #{ref} origin/#{ref}"
File.open(path, 'w'){|f| f.write(content)}
r.git.sh "git add ."
r.git.sh "git commit -am '#{commit_message}'"
output = r.git.sh "git push origin #{ref}"
if output =~ /reject/
return false
end
end
end
end
true
end
protected
def can_edit?(path, last_commit)
current_last_commit = @project.last_commit_for(ref, path).sha
last_commit == current_last_commit
end
end
end
module Gitlab
module Satellite
# GitLab file editor
#
# It gives you ability to make changes to files
# & commit this changes from GitLab UI.
class EditFileAction < Action
attr_accessor :ref
def initialize(user, project, ref)
super user, project
@ref = ref
end
def update(path, content, commit_message, last_commit)
return false unless can_edit?(path, 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}"
# everything worked
true
end
rescue Grit::Git::CommandFailed => ex
Gitlab::GitLogger.error(ex.message)
false
end
protected
def can_edit?(path, last_commit)
current_last_commit = @project.last_commit_for(ref, path).sha
last_commit == current_last_commit
end
end
end
end
...@@ -55,11 +55,11 @@ module Gitlab ...@@ -55,11 +55,11 @@ module Gitlab
prepare_satellite!(repo) prepare_satellite!(repo)
# create target branch in satellite at the corresponding commit from Gitolite # create target branch in satellite at the corresponding commit from Gitolite
repo.git.checkout({b: true}, merge_request.target_branch, "origin/#{merge_request.target_branch}") repo.git.checkout({raise: true, b: true}, merge_request.target_branch, "origin/#{merge_request.target_branch}")
# merge the source branch from Gitolite into the satellite # merge the source branch from Gitolite into the satellite
# will raise CommandFailed when merge fails # will raise CommandFailed when merge fails
repo.git.pull({no_ff: true, raise: true}, :origin, merge_request.source_branch) repo.git.pull({raise: true, no_ff: true}, :origin, merge_request.source_branch)
rescue Grit::Git::CommandFailed => ex rescue Grit::Git::CommandFailed => ex
Gitlab::GitLogger.error(ex.message) Gitlab::GitLogger.error(ex.message)
false false
......
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