Commit 55779b00ea695463056338af993c6332b710ea8f

Authored by Riyad Preukschas
1 parent 8c89beb6

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

app/controllers/tree_controller.rb
@@ -26,7 +26,7 @@ class TreeController < ProjectResourceController @@ -26,7 +26,7 @@ class TreeController < ProjectResourceController
26 end 26 end
27 27
28 def update 28 def update
29 - file_editor = Gitlab::FileEditor.new(current_user, @project, @ref) 29 + file_editor = Gitlab::Satellite::EditFileAction.new(current_user, @project, @ref)
30 update_status = file_editor.update( 30 update_status = file_editor.update(
31 @path, 31 @path,
32 params[:content], 32 params[:content],
lib/gitlab/file_editor.rb
@@ -1,58 +0,0 @@ @@ -1,58 +0,0 @@
1 -module Gitlab  
2 - # GitLab file editor  
3 - #  
4 - # It gives you ability to make changes to files  
5 - # & commit this changes from GitLab UI.  
6 - class FileEditor  
7 - attr_accessor :user, :project, :ref  
8 -  
9 - def initialize(user, project, ref)  
10 - self.user = user  
11 - self.project = project  
12 - self.ref = ref  
13 - end  
14 -  
15 - def update(path, content, commit_message, last_commit)  
16 - return false unless can_edit?(path, last_commit)  
17 -  
18 - Grit::Git.with_timeout(10.seconds) do  
19 - lock_file = Rails.root.join("tmp", "#{project.path}.lock")  
20 -  
21 - File.open(lock_file, "w+") do |f|  
22 - f.flock(File::LOCK_EX)  
23 -  
24 - unless project.satellite.exists?  
25 - raise "Satellite doesn't exist"  
26 - end  
27 -  
28 - project.satellite.clear  
29 -  
30 - Dir.chdir(project.satellite.path) do  
31 - r = Grit::Repo.new('.')  
32 - r.git.sh "git reset --hard"  
33 - r.git.sh "git fetch origin"  
34 - r.git.sh "git config user.name \"#{user.name}\""  
35 - r.git.sh "git config user.email \"#{user.email}\""  
36 - r.git.sh "git checkout -b #{ref} origin/#{ref}"  
37 - File.open(path, 'w'){|f| f.write(content)}  
38 - r.git.sh "git add ."  
39 - r.git.sh "git commit -am '#{commit_message}'"  
40 - output = r.git.sh "git push origin #{ref}"  
41 -  
42 - if output =~ /reject/  
43 - return false  
44 - end  
45 - end  
46 - end  
47 - end  
48 - true  
49 - end  
50 -  
51 - protected  
52 -  
53 - def can_edit?(path, last_commit)  
54 - current_last_commit = @project.last_commit_for(ref, path).sha  
55 - last_commit == current_last_commit  
56 - end  
57 - end  
58 -end  
lib/gitlab/satellite/edit_file_action.rb 0 → 100644
@@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
  1 +module Gitlab
  2 + module Satellite
  3 + # GitLab file editor
  4 + #
  5 + # It gives you ability to make changes to files
  6 + # & commit this changes from GitLab UI.
  7 + class EditFileAction < Action
  8 + attr_accessor :ref
  9 +
  10 + def initialize(user, project, ref)
  11 + super user, project
  12 + @ref = ref
  13 + end
  14 +
  15 + def update(path, content, commit_message, last_commit)
  16 + return false unless can_edit?(path, last_commit)
  17 +
  18 + in_locked_and_timed_satellite do |repo|
  19 + prepare_satellite!(repo)
  20 +
  21 + repo.git.sh "git checkout -b #{ref} origin/#{ref}"
  22 + File.open(path, 'w'){|f| f.write(content)}
  23 + repo.git.sh "git add ."
  24 + repo.git.sh "git commit -am '#{commit_message}'"
  25 + output = repo.git.sh "git push origin #{ref}"
  26 +
  27 + # everything worked
  28 + true
  29 + end
  30 + rescue Grit::Git::CommandFailed => ex
  31 + Gitlab::GitLogger.error(ex.message)
  32 + false
  33 + end
  34 +
  35 + protected
  36 +
  37 + def can_edit?(path, last_commit)
  38 + current_last_commit = @project.last_commit_for(ref, path).sha
  39 + last_commit == current_last_commit
  40 + end
  41 + end
  42 + end
  43 +end
lib/gitlab/satellite/merge_action.rb
@@ -55,11 +55,11 @@ module Gitlab @@ -55,11 +55,11 @@ module Gitlab
55 prepare_satellite!(repo) 55 prepare_satellite!(repo)
56 56
57 # create target branch in satellite at the corresponding commit from Gitolite 57 # create target branch in satellite at the corresponding commit from Gitolite
58 - repo.git.checkout({b: true}, merge_request.target_branch, "origin/#{merge_request.target_branch}") 58 + repo.git.checkout({raise: true, b: true}, merge_request.target_branch, "origin/#{merge_request.target_branch}")
59 59
60 # merge the source branch from Gitolite into the satellite 60 # merge the source branch from Gitolite into the satellite
61 # will raise CommandFailed when merge fails 61 # will raise CommandFailed when merge fails
62 - repo.git.pull({no_ff: true, raise: true}, :origin, merge_request.source_branch) 62 + repo.git.pull({raise: true, no_ff: true}, :origin, merge_request.source_branch)
63 rescue Grit::Git::CommandFailed => ex 63 rescue Grit::Git::CommandFailed => ex
64 Gitlab::GitLogger.error(ex.message) 64 Gitlab::GitLogger.error(ex.message)
65 false 65 false