Commit 700a784bc91c0ee24cbe2f1c36589e40b92ac28d

Authored by Riyad Preukschas
1 parent 30801273

Refactor EditFileAction#update and rename it to commit!

app/controllers/tree_controller.rb
@@ -26,14 +26,14 @@ class TreeController < ProjectResourceController @@ -26,14 +26,14 @@ class TreeController < ProjectResourceController
26 end 26 end
27 27
28 def update 28 def update
29 - file_editor = Gitlab::Satellite::EditFileAction.new(current_user, @project, @ref, @path)  
30 - update_status = file_editor.update( 29 + edit_file_action = Gitlab::Satellite::EditFileAction.new(current_user, @project, @ref, @path)
  30 + updated_successfully = edit_file_action.commit!(
31 params[:content], 31 params[:content],
32 params[:commit_message], 32 params[:commit_message],
33 params[:last_commit] 33 params[:last_commit]
34 ) 34 )
35 35
36 - if update_status 36 + if updated_successfully
37 redirect_to project_tree_path(@project, @id), notice: "Your changes have been successfully commited" 37 redirect_to project_tree_path(@project, @id), notice: "Your changes have been successfully commited"
38 else 38 else
39 flash[:notice] = "Your changes could not be commited, because the file has been changed" 39 flash[:notice] = "Your changes could not be commited, because the file has been changed"
lib/gitlab/satellite/edit_file_action.rb
@@ -5,25 +5,35 @@ module Gitlab @@ -5,25 +5,35 @@ module Gitlab
5 # It gives you ability to make changes to files 5 # It gives you ability to make changes to files
6 # & commit this changes from GitLab UI. 6 # & commit this changes from GitLab UI.
7 class EditFileAction < Action 7 class EditFileAction < Action
8 - attr_accessor :path, :ref 8 + attr_accessor :file_path, :ref
9 9
10 - def initialize(user, project, ref, path)  
11 - super user, project  
12 - @path = path 10 + def initialize(user, project, ref, file_path)
  11 + super user, project, git_timeout: 10.seconds
  12 + @file_path = file_path
13 @ref = ref 13 @ref = ref
14 end 14 end
15 15
16 - def update(content, commit_message, last_commit) 16 + def commit!(content, commit_message, last_commit)
17 return false unless can_edit?(last_commit) 17 return false unless can_edit?(last_commit)
18 18
19 in_locked_and_timed_satellite do |repo| 19 in_locked_and_timed_satellite do |repo|
20 prepare_satellite!(repo) 20 prepare_satellite!(repo)
21 21
22 - repo.git.sh "git checkout -b #{ref} origin/#{ref}"  
23 - File.open(path, 'w'){|f| f.write(content)}  
24 - repo.git.sh "git add ."  
25 - repo.git.sh "git commit -am '#{commit_message}'"  
26 - output = repo.git.sh "git push origin #{ref}" 22 + # create target branch in satellite at the corresponding commit from Gitolite
  23 + repo.git.checkout({raise: true, timeout: true, b: true}, ref, "origin/#{ref}")
  24 +
  25 + # update the file in the satellite's working dir
  26 + file_path_in_satellite = File.join(repo.working_dir, file_path)
  27 + File.open(file_path_in_satellite, 'w') { |f| f.write(content) }
  28 +
  29 + # commit the changes
  30 + # will raise CommandFailed when commit fails
  31 + repo.git.commit(raise: true, timeout: true, a: true, m: commit_message)
  32 +
  33 +
  34 + # push commit back to Gitolite
  35 + # will raise CommandFailed when push fails
  36 + repo.git.push({raise: true, timeout: true}, :origin, ref)
27 37
28 # everything worked 38 # everything worked
29 true 39 true
@@ -36,7 +46,7 @@ module Gitlab @@ -36,7 +46,7 @@ module Gitlab
36 protected 46 protected
37 47
38 def can_edit?(last_commit) 48 def can_edit?(last_commit)
39 - current_last_commit = @project.last_commit_for(ref, path).sha 49 + current_last_commit = @project.last_commit_for(ref, file_path).sha
40 last_commit == current_last_commit 50 last_commit == current_last_commit
41 end 51 end
42 end 52 end