From 60959df3f276d7f50a9a3c759e4fc871183aa0d4 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 19 Nov 2013 15:41:11 +0200 Subject: Remove gitolite mention Signed-off-by: Dmitriy Zaporozhets --- lib/gitlab/satellite/files/edit_file_action.rb | 6 +++--- lib/gitlab/satellite/files/new_file_action.rb | 6 +++--- lib/gitlab/satellite/merge_action.rb | 2 +- lib/gitlab/satellite/satellite.rb | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/gitlab/satellite/files/edit_file_action.rb b/lib/gitlab/satellite/files/edit_file_action.rb index 3747c6afc48..ee9d31ed129 100644 --- a/lib/gitlab/satellite/files/edit_file_action.rb +++ b/lib/gitlab/satellite/files/edit_file_action.rb @@ -8,13 +8,13 @@ module Gitlab # # Returns false if the ref has been updated while editing the file # Returns false if committing the change fails - # Returns false if pushing from the satellite to Gitolite failed or was rejected + # Returns false if pushing from the satellite to bare repo failed or was rejected # Returns true otherwise def commit!(content, commit_message) in_locked_and_timed_satellite do |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 bare repo repo.git.checkout({raise: true, timeout: true, b: true}, ref, "origin/#{ref}") # update the file in the satellite's working dir @@ -26,7 +26,7 @@ module Gitlab repo.git.commit(raise: true, timeout: true, a: true, m: commit_message) - # push commit back to Gitolite + # push commit back to bare repo # will raise CommandFailed when push fails repo.git.push({raise: true, timeout: true}, :origin, ref) diff --git a/lib/gitlab/satellite/files/new_file_action.rb b/lib/gitlab/satellite/files/new_file_action.rb index 97b19809c8d..833a3777158 100644 --- a/lib/gitlab/satellite/files/new_file_action.rb +++ b/lib/gitlab/satellite/files/new_file_action.rb @@ -7,13 +7,13 @@ module Gitlab # # Returns false if the ref has been updated while editing the file # Returns false if committing the change fails - # Returns false if pushing from the satellite to Gitolite failed or was rejected + # Returns false if pushing from the satellite to bare repo failed or was rejected # Returns true otherwise def commit!(content, commit_message) in_locked_and_timed_satellite do |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 bare repo repo.git.checkout({raise: true, timeout: true, b: true}, ref, "origin/#{ref}") # update the file in the satellite's working dir @@ -28,7 +28,7 @@ module Gitlab repo.git.commit(raise: true, timeout: true, a: true, m: commit_message) - # push commit back to Gitolite + # push commit back to bare repo # will raise CommandFailed when push fails repo.git.push({raise: true, timeout: true}, :origin, ref) diff --git a/lib/gitlab/satellite/merge_action.rb b/lib/gitlab/satellite/merge_action.rb index d74d4194ff6..54afd6ab95c 100644 --- a/lib/gitlab/satellite/merge_action.rb +++ b/lib/gitlab/satellite/merge_action.rb @@ -28,7 +28,7 @@ module Gitlab in_locked_and_timed_satellite do |merge_repo| prepare_satellite!(merge_repo) if merge_in_satellite!(merge_repo) - # push merge back to Gitolite + # push merge back to bare repo # will raise CommandFailed when push fails merge_repo.git.push(default_options, :origin, merge_request.target_branch) # remove source branch diff --git a/lib/gitlab/satellite/satellite.rb b/lib/gitlab/satellite/satellite.rb index 6cb7814fae5..353c3024aad 100644 --- a/lib/gitlab/satellite/satellite.rb +++ b/lib/gitlab/satellite/satellite.rb @@ -123,7 +123,7 @@ module Gitlab remotes.each { |name| repo.git.remote(default_options,'rm', name)} end - # Updates the satellite from Gitolite + # Updates the satellite from bare repo # # Note: this will only update remote branches (i.e. origin/*) def update_from_source! -- cgit v1.2.1 From b26abe8ff8c22241c78024089926f63a17e7d86b Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 19 Nov 2013 15:41:32 +0200 Subject: Delete file action for satellites Signed-off-by: Dmitriy Zaporozhets --- lib/gitlab/satellite/files/delete_file_action.rb | 43 ++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 lib/gitlab/satellite/files/delete_file_action.rb diff --git a/lib/gitlab/satellite/files/delete_file_action.rb b/lib/gitlab/satellite/files/delete_file_action.rb new file mode 100644 index 00000000000..8a32a413b96 --- /dev/null +++ b/lib/gitlab/satellite/files/delete_file_action.rb @@ -0,0 +1,43 @@ +require_relative 'file_action' + +module Gitlab + module Satellite + class DeleteFileAction < FileAction + # Deletes file and creates a new commit for it + # + # Returns false if committing the change fails + # Returns false if pushing from the satellite to bare repo failed or was rejected + # Returns true otherwise + def commit!(content, commit_message) + in_locked_and_timed_satellite do |repo| + prepare_satellite!(repo) + + # create target branch in satellite at the corresponding commit from bare repo + 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.delete(file_path_in_satellite) + + # add removed file + repo.add(file_path_in_satellite) + + # 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 bare repo + # will raise CommandFailed when push fails + repo.git.push({raise: true, timeout: true}, :origin, ref) + + # everything worked + true + end + rescue Grit::Git::CommandFailed => ex + Gitlab::GitLogger.error(ex.message) + false + end + end + end +end -- cgit v1.2.1 From 8a91e5d7d0d8f6b395588446f94749170b32821e Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 19 Nov 2013 16:13:37 +0200 Subject: Fix DeleteFile satellite action Signed-off-by: Dmitriy Zaporozhets --- lib/gitlab/satellite/files/delete_file_action.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gitlab/satellite/files/delete_file_action.rb b/lib/gitlab/satellite/files/delete_file_action.rb index 8a32a413b96..10d23f7c243 100644 --- a/lib/gitlab/satellite/files/delete_file_action.rb +++ b/lib/gitlab/satellite/files/delete_file_action.rb @@ -20,7 +20,7 @@ module Gitlab File.delete(file_path_in_satellite) # add removed file - repo.add(file_path_in_satellite) + repo.remove(file_path_in_satellite) # commit the changes # will raise CommandFailed when commit fails -- cgit v1.2.1 From 4cac195a0eab44e092c4bb02e7a5f2aaae6766e3 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 19 Nov 2013 16:14:06 +0200 Subject: DeleteFile context Signed-off-by: Dmitriy Zaporozhets --- app/contexts/files/delete_context.rb | 38 ++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 app/contexts/files/delete_context.rb diff --git a/app/contexts/files/delete_context.rb b/app/contexts/files/delete_context.rb new file mode 100644 index 00000000000..b1937721d42 --- /dev/null +++ b/app/contexts/files/delete_context.rb @@ -0,0 +1,38 @@ +module Files + class DeleteContext < BaseContext + def execute + allowed = if project.protected_branch?(ref) + can?(current_user, :push_code_to_protected_branches, project) + else + can?(current_user, :push_code, project) + end + + unless allowed + return error("You are not allowed to push into this branch") + end + + unless repository.branch_names.include?(ref) + return error("You can only create files if you are on top of a branch") + end + + blob = repository.blob_at(ref, path) + + unless blob + return error("You can only edit text files") + end + + delete_file_action = Gitlab::Satellite::DeleteFileAction.new(current_user, project, ref, path) + + deleted_successfully = delete_file_action.commit!( + nil, + params[:commit_message] + ) + + if deleted_successfully + success + else + error("Your changes could not be commited, because the file has been changed") + end + end + end +end -- cgit v1.2.1 From bd20ec1a3415a9f945b5052a8f0f83cbd2806837 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 19 Nov 2013 16:14:48 +0200 Subject: Remove file from repository feature After click on remove file button you will be asked for commit message via modal window. After submitting modal form file will be removed from repository Signed-off-by: Dmitriy Zaporozhets --- app/controllers/projects/blob_controller.rb | 25 +++++++++++++++++++++++-- app/views/projects/blob/_actions.html.haml | 6 +++++- app/views/projects/blob/_remove.html.haml | 19 +++++++++++++++++++ app/views/projects/blob/show.html.haml | 3 +++ config/routes.rb | 2 +- 5 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 app/views/projects/blob/_remove.html.haml diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb index ba466251b29..087c1639ac6 100644 --- a/app/controllers/projects/blob_controller.rb +++ b/app/controllers/projects/blob_controller.rb @@ -7,9 +7,30 @@ class Projects::BlobController < Projects::ApplicationController before_filter :authorize_code_access! before_filter :require_non_empty_project + before_filter :blob + def show - @blob = @repository.blob_at(@commit.id, @path) + end + + def destroy + result = Files::DeleteContext.new(@project, current_user, params, @ref, @path).execute + + if result[:status] == :success + flash[:notice] = "Your changes have been successfully commited" + redirect_to project_tree_path(@project, @ref) + else + flash[:alert] = result[:error] + render :show + end + end + + private + + def blob + @blob ||= @repository.blob_at(@commit.id, @path) + + return not_found! unless @blob - not_found! unless @blob + @blob end end diff --git a/app/views/projects/blob/_actions.html.haml b/app/views/projects/blob/_actions.html.haml index f6cc62e707e..2f82bfe52f3 100644 --- a/app/views/projects/blob/_actions.html.haml +++ b/app/views/projects/blob/_actions.html.haml @@ -4,7 +4,7 @@ - if allowed_tree_edit? = link_to "edit", project_edit_tree_path(@project, @id), class: "btn btn-small" - else - %span.btn.btn-small.disabled Edit + %span.btn.btn-small.disabled edit = link_to "raw", project_raw_path(@project, @id), class: "btn btn-small", target: "_blank" -# only show normal/blame view links for text files - if @blob.text? @@ -13,3 +13,7 @@ - else = link_to "blame", project_blame_path(@project, @id), class: "btn btn-small" unless @blob.empty? = link_to "history", project_commits_path(@project, @id), class: "btn btn-small" + + - if allowed_tree_edit? + = link_to '#modal-remove-blob', class: "remove-blob btn btn-small btn-remove", "data-toggle" => "modal" do + remove diff --git a/app/views/projects/blob/_remove.html.haml b/app/views/projects/blob/_remove.html.haml new file mode 100644 index 00000000000..1c097330c44 --- /dev/null +++ b/app/views/projects/blob/_remove.html.haml @@ -0,0 +1,19 @@ +%div#modal-remove-blob.modal.hide + .modal-header + %a.close{href: "#", "data-dismiss" => "modal"} × + %h3.page-title Remove #{@blob.name} + %p.light + From branch + %strong= @ref + + .modal-body + = form_tag project_blob_path(@project, @id), method: :delete do + .control-group.commit_message-group + = label_tag 'commit_message', class: "control-label" do + Commit message + .controls + = text_area_tag 'commit_message', params[:commit_message], placeholder: "Removed this file because...", required: true, rows: 3 + .control-group + .controls + = submit_tag 'Remove file', class: 'btn btn-remove' + = link_to "Cancel", '#', class: "btn btn-cancel", "data-dismiss" => "modal" diff --git a/app/views/projects/blob/show.html.haml b/app/views/projects/blob/show.html.haml index d96595bc7f0..56220e520f3 100644 --- a/app/views/projects/blob/show.html.haml +++ b/app/views/projects/blob/show.html.haml @@ -2,3 +2,6 @@ = render 'shared/ref_switcher', destination: 'blob', path: @path %div#tree-holder.tree-holder = render 'blob', blob: @blob + +- if allowed_tree_edit? + = render 'projects/blob/remove' diff --git a/config/routes.rb b/config/routes.rb index 06e8fddf705..d89fc20c6c9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -173,7 +173,7 @@ Gitlab::Application.routes.draw do end scope module: :projects do - resources :blob, only: [:show], constraints: {id: /.+/} + resources :blob, only: [:show, :destroy], constraints: {id: /.+/} resources :raw, only: [:show], constraints: {id: /.+/} resources :tree, only: [:show], constraints: {id: /.+/, format: /(html|js)/ } resources :edit_tree, only: [:show, :update], constraints: {id: /.+/}, path: 'edit' -- cgit v1.2.1