From 806139936898726b32c4fe216ac3a9f4419ce91e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Wed, 3 Feb 2016 18:28:40 -0500 Subject: Add RevertService class with basic logic to revert commit --- app/models/commit.rb | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index 23b771aebb7..e05bddc24c6 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -215,6 +215,14 @@ class Commit ci_commit.try(:status) || :not_found end + def revert_branch_name + "revert-#{project.id}-#{short_id}" + end + + def revert_message + "Revert \"#{safe_message.lines.first}\"".truncate(80) + "\n\nReverts #{to_reference}" + end + private def repo_changes -- cgit v1.2.1 From 91e6e32d130308496065d2efbf71d61e0eeff784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Fri, 5 Feb 2016 18:49:45 -0500 Subject: Make it work for merge commits. --- app/models/commit.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index e05bddc24c6..05468451e1f 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -223,6 +223,10 @@ class Commit "Revert \"#{safe_message.lines.first}\"".truncate(80) + "\n\nReverts #{to_reference}" end + def is_a_merge_commit? + parents.size > 1 + end + private def repo_changes -- cgit v1.2.1 From ef591b87d157d29796e34968ac98e5a7a671b17e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Sun, 7 Feb 2016 15:11:12 -0500 Subject: Fix commit message plus other little fix. --- app/models/commit.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index 05468451e1f..398041be3fd 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -220,7 +220,7 @@ class Commit end def revert_message - "Revert \"#{safe_message.lines.first}\"".truncate(80) + "\n\nReverts #{to_reference}" + "Revert \"#{safe_message.lines.first.chomp}\"".truncate(80) + "\n\nReverts #{to_reference}" end def is_a_merge_commit? -- cgit v1.2.1 From a28eef1d1a871c14142d01f1ef8c76660da34c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Mon, 8 Feb 2016 15:37:27 -0500 Subject: Update copy and URLs used when reverting MRs. --- app/models/commit.rb | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index 398041be3fd..25007c7f15a 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -227,6 +227,12 @@ class Commit parents.size > 1 end + def merged_merge_request + return @merged_merge_request if defined?(@merged_merge_request) + + @merged_merge_request = is_a_merge_commit? && MergeRequest.where(merge_commit_sha: id).first + end + private def repo_changes -- cgit v1.2.1 From 328b52d58a36525fdc853f15877f87bcd7832d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Tue, 9 Feb 2016 14:50:25 -0500 Subject: Some updates after last code review. --- app/models/commit.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index 25007c7f15a..3c0e042e2ed 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -220,17 +220,17 @@ class Commit end def revert_message - "Revert \"#{safe_message.lines.first.chomp}\"".truncate(80) + "\n\nReverts #{to_reference}" + "Revert \"#{title}\"".truncate(80) + "\n\nReverts #{sha}" end - def is_a_merge_commit? + def merge_commit? parents.size > 1 end def merged_merge_request return @merged_merge_request if defined?(@merged_merge_request) - @merged_merge_request = is_a_merge_commit? && MergeRequest.where(merge_commit_sha: id).first + @merged_merge_request = merge_commit? && MergeRequest.find_by(merge_commit_sha: id) end private -- cgit v1.2.1 From f088caca3b3f90829735c23d061fd55230d1be3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Thu, 11 Feb 2016 10:03:13 -0500 Subject: Use a reference to the MR when reverting MRs. --- app/models/commit.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index 3c0e042e2ed..1237c50b759 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -220,7 +220,13 @@ class Commit end def revert_message - "Revert \"#{title}\"".truncate(80) + "\n\nReverts #{sha}" + description = if merged_merge_request + "Reverts #{@merged_merge_request.to_reference}" + else + "Reverts #{sha}" + end + + "Revert \"#{title}\"".truncate(80) + "\n\n#{description}" end def merge_commit? -- cgit v1.2.1 From 02f48053f1328055bef548bf2627e8f71c919a11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Fri, 12 Feb 2016 10:08:42 -0500 Subject: No longer need to ignore temporary branch. * Now it's only created when user choose to create a MR and logic to hide it is handled by https://gitlab.com/gitlab-org/gitlab-ce/blob/50595af7b0e304f16e2955109abd2d25cd96efda/app/helpers/application_helper.rb#L139 --- app/models/commit.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index 1237c50b759..beae2fe7a1a 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -216,7 +216,7 @@ class Commit end def revert_branch_name - "revert-#{project.id}-#{short_id}" + "revert-#{short_id}" end def revert_message -- cgit v1.2.1 From be54ba33ed1fed6ddef5d544c25b293a9669142f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Fri, 12 Feb 2016 10:55:02 -0500 Subject: Refactor commit message for revert commit. --- app/models/commit.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index beae2fe7a1a..38bbc24fbfc 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -221,12 +221,12 @@ class Commit def revert_message description = if merged_merge_request - "Reverts #{@merged_merge_request.to_reference}" + "This reverts merge request #{merged_merge_request.to_reference}" else - "Reverts #{sha}" + "This reverts commit #{sha}" end - "Revert \"#{title}\"".truncate(80) + "\n\n#{description}" + "Revert \"#{title}\"" + "\n\n#{description}" end def merge_commit? -- cgit v1.2.1 From d34733efc4ac24979587a7ce6ac69db41a2003c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Sun, 14 Feb 2016 22:36:30 -0500 Subject: Don't show revert button if commit/MR has already been reverted. --- app/models/commit.rb | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'app/models/commit.rb') 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 -- cgit v1.2.1 From 169070ba4b83b1cbb4084abcf8ffeb9f492fcffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Mon, 15 Feb 2016 16:20:18 -0500 Subject: Some updates from last code review. --- app/models/commit.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index 628926e4886..e8528782b59 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -228,7 +228,7 @@ class Commit end def revert_message - "Revert \"#{title}\"" + "\n\n#{revert_description}" + %Q{Revert "#{title}"\n\n#{revert_description}} end def reverts_commit?(commit) @@ -242,7 +242,7 @@ class Commit def merged_merge_request return @merged_merge_request if defined?(@merged_merge_request) - @merged_merge_request = merge_commit? && MergeRequest.find_by(merge_commit_sha: id) + @merged_merge_request = merge_commit? && project.merge_requests.find_by(merge_commit_sha: id) end def has_been_reverted?(current_user = nil, noteable = self) -- cgit v1.2.1 From 28aaef24adba2b39e0744d888b0e02c7bdb95c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Tue, 16 Feb 2016 18:06:56 -0500 Subject: Don't use `self` when looking for cross-references! --- app/models/commit.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index e8528782b59..bb997663cf4 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -247,7 +247,7 @@ class Commit def has_been_reverted?(current_user = nil, noteable = self) Gitlab::ReferenceExtractor.lazily do - [self, *noteable.notes].flat_map do |note| + noteable.notes.system.flat_map do |note| note.all_references(current_user).commits end end.any? { |commit_ref| commit_ref.reverts_commit?(self) } -- cgit v1.2.1 From 5ef3f80d41198bff244f6a6d2e3146b4741e81c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Thu, 18 Feb 2016 11:58:04 -0500 Subject: More updates from the last code review. --- app/models/commit.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index bb997663cf4..b99abb540ea 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -242,7 +242,7 @@ class Commit def merged_merge_request return @merged_merge_request if defined?(@merged_merge_request) - @merged_merge_request = merge_commit? && project.merge_requests.find_by(merge_commit_sha: id) + @merged_merge_request = project.merge_requests.find_by(merge_commit_sha: id) if merge_commit? end def has_been_reverted?(current_user = nil, noteable = self) -- cgit v1.2.1 From 96ed5c5114e7863d4d0731ccea9da99696a867a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Mon, 22 Feb 2016 15:46:39 +0100 Subject: Ensure we don't check a commit's description for revert message if it has no description --- app/models/commit.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models/commit.rb') diff --git a/app/models/commit.rb b/app/models/commit.rb index b99abb540ea..3224f5457f0 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -232,7 +232,7 @@ class Commit end def reverts_commit?(commit) - description.include?(commit.revert_description) + description? && description.include?(commit.revert_description) end def merge_commit? -- cgit v1.2.1