diff options
-rw-r--r-- | app/assets/javascripts/project_select.js | 24 | ||||
-rw-r--r-- | changelogs/unreleased/fix-500-on-old-merge-requests.yml | 5 | ||||
-rw-r--r-- | changelogs/unreleased/fix-project-select-js-without-button.yml | 5 | ||||
-rw-r--r-- | lib/gitlab/diff/position.rb | 8 | ||||
-rw-r--r-- | spec/lib/gitlab/diff/position_spec.rb | 37 |
5 files changed, 66 insertions, 13 deletions
diff --git a/app/assets/javascripts/project_select.js b/app/assets/javascripts/project_select.js index fb01390f91c..bffc85e6315 100644 --- a/app/assets/javascripts/project_select.js +++ b/app/assets/javascripts/project_select.js @@ -2,13 +2,15 @@ import Api from './api'; import ProjectSelectComboButton from './project_select_combo_button'; -(function() { - this.ProjectSelect = (function() { +(function () { + this.ProjectSelect = (function () { function ProjectSelect() { $('.ajax-project-select').each(function(i, select) { var placeholder; + const simpleFilter = $(select).data('simple-filter') || false; this.groupId = $(select).data('group-id'); this.includeGroups = $(select).data('include-groups'); + this.allProjects = $(select).data('all-projects') || false; this.orderBy = $(select).data('order-by') || 'id'; this.withIssuesEnabled = $(select).data('with-issues-enabled'); this.withMergeRequestsEnabled = $(select).data('with-merge-requests-enabled'); @@ -21,10 +23,10 @@ import ProjectSelectComboButton from './project_select_combo_button'; $(select).select2({ placeholder: placeholder, minimumInputLength: 0, - query: (function(_this) { - return function(query) { + query: (function (_this) { + return function (query) { var finalCallback, projectsCallback; - finalCallback = function(projects) { + finalCallback = function (projects) { var data; data = { results: projects @@ -32,9 +34,9 @@ import ProjectSelectComboButton from './project_select_combo_button'; return query.callback(data); }; if (_this.includeGroups) { - projectsCallback = function(projects) { + projectsCallback = function (projects) { var groupsCallback; - groupsCallback = function(groups) { + groupsCallback = function (groups) { var data; data = groups.concat(projects); return finalCallback(data); @@ -50,23 +52,25 @@ import ProjectSelectComboButton from './project_select_combo_button'; return Api.projects(query.term, { order_by: _this.orderBy, with_issues_enabled: _this.withIssuesEnabled, - with_merge_requests_enabled: _this.withMergeRequestsEnabled + with_merge_requests_enabled: _this.withMergeRequestsEnabled, + membership: !_this.allProjects, }, projectsCallback); } }; })(this), id: function(project) { + if (simpleFilter) return project.id; return JSON.stringify({ name: project.name, url: project.web_url, }); }, - text: function(project) { + text: function (project) { return project.name_with_namespace || project.name; }, dropdownCssClass: "ajax-project-dropdown" }); - + if (simpleFilter) return select; return new ProjectSelectComboButton(select); }); } diff --git a/changelogs/unreleased/fix-500-on-old-merge-requests.yml b/changelogs/unreleased/fix-500-on-old-merge-requests.yml new file mode 100644 index 00000000000..765d7466819 --- /dev/null +++ b/changelogs/unreleased/fix-500-on-old-merge-requests.yml @@ -0,0 +1,5 @@ +--- +title: Fix 500 errors caused by empty diffs in some discussions +merge_request: 14945 +author: Alexander Popov +type: fixed diff --git a/changelogs/unreleased/fix-project-select-js-without-button.yml b/changelogs/unreleased/fix-project-select-js-without-button.yml new file mode 100644 index 00000000000..389ca2394f0 --- /dev/null +++ b/changelogs/unreleased/fix-project-select-js-without-button.yml @@ -0,0 +1,5 @@ +--- +title: Use project select dropdown not only as a combobutton +merge_request: 15043 +author: +type: fixed diff --git a/lib/gitlab/diff/position.rb b/lib/gitlab/diff/position.rb index bd0a9502a5e..ccfb908bcca 100644 --- a/lib/gitlab/diff/position.rb +++ b/lib/gitlab/diff/position.rb @@ -94,7 +94,9 @@ module Gitlab end def diff_file(repository) - @diff_file ||= begin + return @diff_file if defined?(@diff_file) + + @diff_file = begin if RequestStore.active? key = { project_id: repository.project.id, @@ -122,8 +124,8 @@ module Gitlab def find_diff_file(repository) return unless diff_refs.complete? - - diff_refs.compare_in(repository.project).diffs(paths: paths, expanded: true).diff_files.first + return unless comparison = diff_refs.compare_in(repository.project) + comparison.diffs(paths: paths, expanded: true).diff_files.first end def get_formatter_class(type) diff --git a/spec/lib/gitlab/diff/position_spec.rb b/spec/lib/gitlab/diff/position_spec.rb index 245f24e96d4..677eb373d22 100644 --- a/spec/lib/gitlab/diff/position_spec.rb +++ b/spec/lib/gitlab/diff/position_spec.rb @@ -364,6 +364,43 @@ describe Gitlab::Diff::Position do end end + describe "position for a missing ref" do + let(:diff_refs) do + Gitlab::Diff::DiffRefs.new( + base_sha: "not_existing_sha", + head_sha: "existing_sha" + ) + end + + subject do + described_class.new( + old_path: "files/ruby/feature.rb", + new_path: "files/ruby/feature.rb", + old_line: 3, + new_line: nil, + diff_refs: diff_refs + ) + end + + describe "#diff_file" do + it "does not raise exception" do + expect { subject.diff_file(project.repository) }.not_to raise_error + end + end + + describe "#diff_line" do + it "does not raise exception" do + expect { subject.diff_line(project.repository) }.not_to raise_error + end + end + + describe "#line_code" do + it "does not raise exception" do + expect { subject.line_code(project.repository) }.not_to raise_error + end + end + end + describe "position for a file in the initial commit" do let(:commit) { project.commit("1a0b36b3cdad1d2ee32457c102a8c0b7056fa863") } |