summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiyad Preukschas <riyad@informatik.uni-bremen.de>2012-10-26 01:59:50 +0200
committerRiyad Preukschas <riyad@informatik.uni-bremen.de>2012-10-26 01:59:50 +0200
commit700a784bc91c0ee24cbe2f1c36589e40b92ac28d (patch)
tree1f818a905cdabe2b5d24cc147aea1386e0a7248c
parent3080127354a2c92fd3ceecc05fe93e091e3b5eec (diff)
downloadgitlab-ce-700a784bc91c0ee24cbe2f1c36589e40b92ac28d.tar.gz
Refactor EditFileAction#update and rename it to commit!
-rw-r--r--app/controllers/tree_controller.rb6
-rw-r--r--lib/gitlab/satellite/edit_file_action.rb32
2 files changed, 24 insertions, 14 deletions
diff --git a/app/controllers/tree_controller.rb b/app/controllers/tree_controller.rb
index 7b527041d7e..725f48fa014 100644
--- a/app/controllers/tree_controller.rb
+++ b/app/controllers/tree_controller.rb
@@ -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"
diff --git a/lib/gitlab/satellite/edit_file_action.rb b/lib/gitlab/satellite/edit_file_action.rb
index 0a5e753b8d7..1e2a21633bb 100644
--- a/lib/gitlab/satellite/edit_file_action.rb
+++ b/lib/gitlab/satellite/edit_file_action.rb
@@ -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