summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRubén Dávila <rdavila84@gmail.com>2016-02-14 22:36:30 -0500
committerRobert Speicher <rspeicher@gmail.com>2016-02-19 13:14:54 -0500
commitd34733efc4ac24979587a7ce6ac69db41a2003c3 (patch)
tree6676c82cdc7736e37a36a9a083851a9c8c097c68
parente8d15f1339b1dac1c97516c320631e04c3e5e4d7 (diff)
downloadgitlab-ce-d34733efc4ac24979587a7ce6ac69db41a2003c3.tar.gz
Don't show revert button if commit/MR has already been reverted.
-rw-r--r--app/models/commit.rb26
-rw-r--r--app/models/merge_request.rb10
-rw-r--r--app/views/projects/commit/_commit_box.html.haml3
-rw-r--r--app/views/projects/merge_requests/_show.html.haml4
-rw-r--r--app/views/projects/merge_requests/widget/_merged.html.haml2
5 files changed, 35 insertions, 10 deletions
diff --git a/app/models/commit.rb b/app/models/commit.rb
index 38bbc24fbfc..628926e4886 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -219,14 +219,20 @@ class Commit
"revert-#{short_id}"
end
+ def revert_description
+ if merged_merge_request
+ "This reverts merge request #{merged_merge_request.to_reference}"
+ else
+ "This reverts commit #{sha}"
+ end
+ end
+
def revert_message
- description = if merged_merge_request
- "This reverts merge request #{merged_merge_request.to_reference}"
- else
- "This reverts commit #{sha}"
- end
+ "Revert \"#{title}\"" + "\n\n#{revert_description}"
+ end
- "Revert \"#{title}\"" + "\n\n#{description}"
+ def reverts_commit?(commit)
+ description.include?(commit.revert_description)
end
def merge_commit?
@@ -239,6 +245,14 @@ class Commit
@merged_merge_request = merge_commit? && MergeRequest.find_by(merge_commit_sha: id)
end
+ def has_been_reverted?(current_user = nil, noteable = self)
+ Gitlab::ReferenceExtractor.lazily do
+ [self, *noteable.notes].flat_map do |note|
+ note.all_references(current_user).commits
+ end
+ end.any? { |commit_ref| commit_ref.reverts_commit?(self) }
+ end
+
private
def repo_changes
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 8eb201b154d..82d096989cf 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -533,4 +533,14 @@ class MergeRequest < ActiveRecord::Base
[diff_base_commit, last_commit]
end
+
+ def merge_commit
+ @merge_commit ||= project.commit(merge_commit_sha) if merge_commit_sha
+ end
+
+ def has_been_reverted?(current_user = nil)
+ if merge_commit
+ merge_commit.has_been_reverted?(current_user, self)
+ end
+ end
end
diff --git a/app/views/projects/commit/_commit_box.html.haml b/app/views/projects/commit/_commit_box.html.haml
index 14f4e429f13..585cc35202d 100644
--- a/app/views/projects/commit/_commit_box.html.haml
+++ b/app/views/projects/commit/_commit_box.html.haml
@@ -16,7 +16,8 @@
= link_to namespace_project_tree_path(@project.namespace, @project, @commit), class: "btn btn-grouped" do
= icon('files-o')
Browse Files
- = revert_commit_link(namespace_project_commit_path(@project.namespace, @project, @commit.id))
+ - unless @commit.has_been_reverted?(current_user)
+ = revert_commit_link(namespace_project_commit_path(@project.namespace, @project, @commit.id))
%div
%p
diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml
index f7ed3a25180..ce8e625c87f 100644
--- a/app/views/projects/merge_requests/_show.html.haml
+++ b/app/views/projects/merge_requests/_show.html.haml
@@ -85,8 +85,8 @@
= spinner
= render 'shared/issuable/sidebar', issuable: @merge_request
-- if @merge_request.merge_commit_sha
- = render "projects/commit/revert", commit_id: @merge_request.merge_commit_sha, title: @merge_request.title
+- if @merge_request.merge_commit && !@merge_request.has_been_reverted?(current_user)
+ = render "projects/commit/revert", commit_id: @merge_request.merge_commit.id, title: @merge_request.title
:javascript
var merge_request;
diff --git a/app/views/projects/merge_requests/widget/_merged.html.haml b/app/views/projects/merge_requests/widget/_merged.html.haml
index 9bbdbb90eb0..a88495968fd 100644
--- a/app/views/projects/merge_requests/widget/_merged.html.haml
+++ b/app/views/projects/merge_requests/widget/_merged.html.haml
@@ -6,7 +6,7 @@
- if @merge_request.merge_event
by #{link_to_member(@project, @merge_request.merge_event.author, avatar: true)}
#{time_ago_with_tooltip(@merge_request.merge_event.created_at)}
- - if @merge_request.merge_commit_sha.present?
+ - unless @merge_request.has_been_reverted?(current_user)
= revert_commit_link(namespace_project_merge_request_path(@project.namespace, @project, @merge_request), btn_class: 'sm')
%div
- if !@merge_request.source_branch_exists? || (params[:delete_source] == 'true')