diff --git a/ee/lib/gitlab/code_owners/file.rb b/ee/lib/gitlab/code_owners/file.rb index 0bde1912ed2488161e013e35044ae973e3763b0f..d51dc94e46ada6687e583c0ac713c78266406ff4 100644 --- a/ee/lib/gitlab/code_owners/file.rb +++ b/ee/lib/gitlab/code_owners/file.rb @@ -80,7 +80,7 @@ def get_parsed_non_sectional_data data.lines.each do |line| line = line.strip - next if skip?(line) + next if skip?(line) || line.match?(SECTION_HEADER_REGEX) extract_entry_and_populate_parsed_data(line, parsed) end diff --git a/ee/spec/lib/gitlab/code_owners/file_spec.rb b/ee/spec/lib/gitlab/code_owners/file_spec.rb index 9858e184cf80854530fc8b74b6f542f35ccc66dc..f3ee8c65624ebe1565764b141f9c77b289047c81 100644 --- a/ee/spec/lib/gitlab/code_owners/file_spec.rb +++ b/ee/spec/lib/gitlab/code_owners/file_spec.rb @@ -37,6 +37,21 @@ def owner_line(pattern) expect(owner_line('/**/LICENSE')).to include('legal', 'janedoe@gitlab.com') end + context "when CODEOWNERS file contains multiple sections" do + let(:file_content) do + File.read(Rails.root.join("ee", "spec", "fixtures", "sectional_codeowners_example")) + end + + let(:patterns) { ["[Documentation]", "[Database]"] } + let(:paths) { ["/**/[Documentation]", "/**/[Database]"] } + + it "skips section headers when parsing" do + expect(file.parsed_data.keys).not_to include(*paths) + expect(file.parsed_data.values.any? { |e| patterns.include?(e.pattern) }).to be_falsey + expect(file.parsed_data.values.any? { |e| e.owner_line.blank? }).to be_falsey + end + end + context "when feature flag `:sectional_codeowners` is enabled" do using RSpec::Parameterized::TableSyntax @@ -44,7 +59,7 @@ def owner_line(pattern) stub_feature_flags(sectional_codeowners: true) end - shared_examples_for "creates expected parsed results" do + shared_examples_for "creates expected parsed sectional results" do it "is a hash sorted by sections without duplicates" do data = file.parsed_data @@ -102,7 +117,7 @@ def owner_line(pattern) File.read(Rails.root.join("ee", "spec", "fixtures", "sectional_codeowners_example")) end - it_behaves_like "creates expected parsed results" + it_behaves_like "creates expected parsed sectional results" end context "when CODEOWNERS file contains multiple sections with mixed-case names" do @@ -110,7 +125,7 @@ def owner_line(pattern) File.read(Rails.root.join("ee", "spec", "fixtures", "mixed_case_sectional_codeowners_example")) end - it_behaves_like "creates expected parsed results" + it_behaves_like "creates expected parsed sectional results" end end end