summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/models/project.rb6
-rw-r--r--app/models/repository.rb13
2 files changed, 9 insertions, 10 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index 2ba273c6f98..800c8afb49f 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -1737,10 +1737,10 @@ class Project < ActiveRecord::Base
end
def protected_for?(ref)
- resolved_ref = repository.resolve_ref(ref)
- return false unless resolved_ref
+ return false unless ref && !repository.ambiguous_ref?(ref)
- ref_name = Gitlab::Git.ref_name(resolved_ref)
+ resolved_ref = repository.resolve_ref(ref)
+ ref_name = resolved_ref == ref ? Gitlab::Git.ref_name(resolved_ref) : ref
if Gitlab::Git.branch_ref?(resolved_ref)
ProtectedBranch.protected?(self, ref_name)
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 221d01c5b44..9e01f7f0df5 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -182,15 +182,14 @@ class Repository
tags.find { |tag| tag.name == name }
end
- def resolve_ref(ref)
- tag_exists = tag_exists?(ref)
- branch_exists = branch_exists?(ref)
+ def ambiguous_ref?(ref)
+ tag_exists?(ref) && branch_exists?(ref)
+ end
- if tag_exists && branch_exists
- nil
- elsif tag_exists
+ def resolve_ref(ref)
+ if tag_exists?(ref)
Gitlab::Git::TAG_REF_PREFIX + ref
- elsif branch_exists
+ elsif branch_exists?(ref)
Gitlab::Git::BRANCH_REF_PREFIX + ref
else
ref