move edit to separate controller. This fixes #3265
This commit is contained in:
parent
b6641d6932
commit
29b0ac489b
5 changed files with 51 additions and 41 deletions
47
app/controllers/edit_tree_controller.rb
Normal file
47
app/controllers/edit_tree_controller.rb
Normal file
|
@ -0,0 +1,47 @@
|
|||
# Controller for edit a repository's file
|
||||
class EditTreeController < ProjectResourceController
|
||||
include ExtractsPath
|
||||
|
||||
# Authorize
|
||||
before_filter :authorize_read_project!
|
||||
before_filter :authorize_code_access!
|
||||
before_filter :require_non_empty_project
|
||||
|
||||
before_filter :edit_requirements, only: [:edit, :update]
|
||||
|
||||
def show
|
||||
@last_commit = @project.repository.last_commit_for(@ref, @path).sha
|
||||
end
|
||||
|
||||
def 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 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"
|
||||
render :edit
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def edit_requirements
|
||||
unless @tree.is_blob? && @tree.text?
|
||||
redirect_to project_tree_path(@project, @id), notice: "You can only edit text files"
|
||||
end
|
||||
|
||||
allowed = if project.protected_branch? @ref
|
||||
can?(current_user, :push_code_to_protected_branches, project)
|
||||
else
|
||||
can?(current_user, :push_code, project)
|
||||
end
|
||||
|
||||
return access_denied! unless allowed
|
||||
end
|
||||
end
|
|
@ -7,8 +7,6 @@ class TreeController < ProjectResourceController
|
|||
before_filter :authorize_code_access!
|
||||
before_filter :require_non_empty_project
|
||||
|
||||
before_filter :edit_requirements, only: [:edit, :update]
|
||||
|
||||
def show
|
||||
@hex_path = Digest::SHA1.hexdigest(@path)
|
||||
@logs_path = logs_file_project_ref_path(@project, @ref, @path)
|
||||
|
@ -19,40 +17,4 @@ class TreeController < ProjectResourceController
|
|||
format.js { no_cache_headers }
|
||||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
@last_commit = @project.repository.last_commit_for(@ref, @path).sha
|
||||
end
|
||||
|
||||
def 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 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"
|
||||
render :edit
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def edit_requirements
|
||||
unless @tree.is_blob? && @tree.text?
|
||||
redirect_to project_tree_path(@project, @id), notice: "You can only edit text files"
|
||||
end
|
||||
|
||||
allowed = if project.protected_branch? @ref
|
||||
can?(current_user, :push_code_to_protected_branches, project)
|
||||
else
|
||||
can?(current_user, :push_code, project)
|
||||
end
|
||||
|
||||
return access_denied! unless allowed
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.file-editor
|
||||
= form_tag(project_tree_path(@project, @id), method: :put, class: "form-horizontal") do
|
||||
= form_tag(project_edit_tree_path(@project, @id), method: :put, class: "form-horizontal") do
|
||||
.file_holder
|
||||
.file_title
|
||||
%i.icon-file
|
|
@ -1,7 +1,7 @@
|
|||
.btn-group.tree-btn-group
|
||||
-# only show edit link for text files
|
||||
- if @tree.text?
|
||||
= link_to "edit", edit_project_tree_path(@project, @id), class: "btn btn-tiny", disabled: !allowed_tree_edit?
|
||||
= link_to "edit", project_edit_tree_path(@project, @id), class: "btn btn-tiny", disabled: !allowed_tree_edit?
|
||||
= link_to "raw", project_blob_path(@project, @id), class: "btn btn-tiny", target: "_blank"
|
||||
-# only show normal/blame view links for text files
|
||||
- if @tree.text?
|
||||
|
|
|
@ -168,7 +168,8 @@ Gitlab::Application.routes.draw do
|
|||
#
|
||||
resources :projects, constraints: { id: /(?:[a-zA-Z.0-9_\-]+\/)?[a-zA-Z.0-9_\-]+/ }, except: [:new, :create, :index], path: "/" do
|
||||
resources :blob, only: [:show], constraints: {id: /.+/}
|
||||
resources :tree, only: [:show, :edit, :update], constraints: {id: /.+/}
|
||||
resources :tree, only: [:show], constraints: {id: /.+/, format: /(html|js)/ }
|
||||
resources :edit_tree, only: [:show, :update], constraints: {id: /.+/}, path: 'edit'
|
||||
resources :commit, only: [:show], constraints: {id: /[[:alnum:]]{6,40}/}
|
||||
resources :commits, only: [:show], constraints: {id: /(?:[^.]|\.(?!atom$))+/, format: /atom/}
|
||||
resources :compare, only: [:index, :create]
|
||||
|
|
Loading…
Reference in a new issue