summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRobert Speicher <rspeicher@gmail.com>2015-04-16 14:06:05 -0400
committerRobert Speicher <rspeicher@gmail.com>2015-04-20 13:01:47 -0400
commit2823c058d8cff59f10f57a106e0e1e4e3c0b2870 (patch)
tree5b8247a955fc88c7d61f6610a297647fce67dc87 /lib
parent3a0b4340aae05510671f9110bb46d356c5bc497b (diff)
downloadgitlab-ce-2823c058d8cff59f10f57a106e0e1e4e3c0b2870.tar.gz
project_from_ref returns nil when reference can't be accessed
Prior it would return the project from the current context, which wasn't the intended behavior.
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/markdown/commit_range_reference_filter.rb2
-rw-r--r--lib/gitlab/markdown/commit_reference_filter.rb8
-rw-r--r--lib/gitlab/markdown/cross_project_reference.rb7
-rw-r--r--lib/gitlab/markdown/issue_reference_filter.rb2
-rw-r--r--lib/gitlab/markdown/merge_request_reference_filter.rb2
-rw-r--r--lib/gitlab/markdown/snippet_reference_filter.rb2
6 files changed, 14 insertions, 9 deletions
diff --git a/lib/gitlab/markdown/commit_range_reference_filter.rb b/lib/gitlab/markdown/commit_range_reference_filter.rb
index 80c57b158a1..1128c1bed7a 100644
--- a/lib/gitlab/markdown/commit_range_reference_filter.rb
+++ b/lib/gitlab/markdown/commit_range_reference_filter.rb
@@ -91,7 +91,7 @@ module Gitlab
end
def valid_range?(project, from_id, to_id)
- project.valid_repo? && commit(from_id) && commit(to_id)
+ project && project.valid_repo? && commit(from_id) && commit(to_id)
end
def url_for_commit_range(project, from_id, to_id)
diff --git a/lib/gitlab/markdown/commit_reference_filter.rb b/lib/gitlab/markdown/commit_reference_filter.rb
index 5a7eca7e5b0..745de6402cf 100644
--- a/lib/gitlab/markdown/commit_reference_filter.rb
+++ b/lib/gitlab/markdown/commit_reference_filter.rb
@@ -47,7 +47,7 @@ module Gitlab
self.class.references_in(text) do |match, commit_ref, project_ref|
project = self.project_from_ref(project_ref)
- if project.valid_repo? && commit = project.repository.commit(commit_ref)
+ if commit = commit_from_ref(project, commit_ref)
url = url_for_commit(project, commit)
title = escape_once(commit.link_title)
@@ -64,6 +64,12 @@ module Gitlab
end
end
+ def commit_from_ref(project, commit_ref)
+ if project && project.valid_repo?
+ project.repository.commit(commit_ref)
+ end
+ end
+
def url_for_commit(project, commit)
h = Rails.application.routes.url_helpers
h.namespace_project_commit_url(project.namespace, project, commit,
diff --git a/lib/gitlab/markdown/cross_project_reference.rb b/lib/gitlab/markdown/cross_project_reference.rb
index 1ef6436451d..de05102751f 100644
--- a/lib/gitlab/markdown/cross_project_reference.rb
+++ b/lib/gitlab/markdown/cross_project_reference.rb
@@ -10,18 +10,17 @@ module Gitlab
#
# Defaults to value of `context[:project]` if:
# * No reference is given OR
- # * Reference given doesn't exist OR
- # * Reference given can't be read by the current user
+ # * Reference given doesn't exist
#
# ref - String reference.
#
- # Returns a Project
+ # Returns a Project, or nil if the reference can't be accessed
def project_from_ref(ref)
if ref && other = Project.find_with_namespace(ref)
if user_can_reference_project?(other)
other
else
- context[:project]
+ nil
end
else
context[:project]
diff --git a/lib/gitlab/markdown/issue_reference_filter.rb b/lib/gitlab/markdown/issue_reference_filter.rb
index 13d2ba4bab3..c9267cc3e9d 100644
--- a/lib/gitlab/markdown/issue_reference_filter.rb
+++ b/lib/gitlab/markdown/issue_reference_filter.rb
@@ -47,7 +47,7 @@ module Gitlab
self.class.references_in(text) do |match, issue, project_ref|
project = self.project_from_ref(project_ref)
- if project.issue_exists?(issue)
+ if project && project.issue_exists?(issue)
url = url_for_issue(issue, project, only_path: context[:only_path])
title = escape_once("Issue: #{title_for_issue(issue, project)}")
diff --git a/lib/gitlab/markdown/merge_request_reference_filter.rb b/lib/gitlab/markdown/merge_request_reference_filter.rb
index 38edf0a140c..40239523cda 100644
--- a/lib/gitlab/markdown/merge_request_reference_filter.rb
+++ b/lib/gitlab/markdown/merge_request_reference_filter.rb
@@ -47,7 +47,7 @@ module Gitlab
self.class.references_in(text) do |match, id, project_ref|
project = self.project_from_ref(project_ref)
- if merge_request = project.merge_requests.find_by(iid: id)
+ if project && merge_request = project.merge_requests.find_by(iid: id)
title = escape_once("Merge Request: #{merge_request.title}")
klass = reference_class(:merge_request)
diff --git a/lib/gitlab/markdown/snippet_reference_filter.rb b/lib/gitlab/markdown/snippet_reference_filter.rb
index 9cada5abaa0..ada67de992b 100644
--- a/lib/gitlab/markdown/snippet_reference_filter.rb
+++ b/lib/gitlab/markdown/snippet_reference_filter.rb
@@ -47,7 +47,7 @@ module Gitlab
self.class.references_in(text) do |match, id, project_ref|
project = self.project_from_ref(project_ref)
- if snippet = project.snippets.find_by(id: id)
+ if project && snippet = project.snippets.find_by(id: id)
title = escape_once("Snippet: #{snippet.title}")
klass = reference_class(:snippet)