diff options
author | Robert Speicher <rspeicher@gmail.com> | 2015-04-16 14:06:05 -0400 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2015-04-20 13:01:47 -0400 |
commit | 2823c058d8cff59f10f57a106e0e1e4e3c0b2870 (patch) | |
tree | 5b8247a955fc88c7d61f6610a297647fce67dc87 /lib | |
parent | 3a0b4340aae05510671f9110bb46d356c5bc497b (diff) | |
download | gitlab-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')
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) |