diff --git a/lib/fbe/unmask_repos.rb b/lib/fbe/unmask_repos.rb index 3c518b0..7d616a9 100644 --- a/lib/fbe/unmask_repos.rb +++ b/lib/fbe/unmask_repos.rb @@ -92,6 +92,7 @@ def Fbe.unmask_repos( # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticCompl re = Fbe.mask_to_regex(mask[1..]) repos.reject! { |r| re.match?(r) } end + repos.uniq! repos.reject! { |repo| octo.repository(repo)[:archived] } raise(Fbe::Error, "No repos found matching: #{options.repositories.inspect}") if repos.empty? repos.shuffle! diff --git a/test/fbe/test_unmask_repos.rb b/test/fbe/test_unmask_repos.rb index cb1831e..0a46a3b 100644 --- a/test/fbe/test_unmask_repos.rb +++ b/test/fbe/test_unmask_repos.rb @@ -50,6 +50,13 @@ def test_finds_case_insensitive assert_equal(2, list.size) end + def test_deduplicates_repos_matched_by_overlapping_masks + opts = Judges::Options.new({ 'testing' => true, 'repositories' => 'yegor256/factbase,Yegor256/*' }) + list = Fbe.unmask_repos(options: opts, global: {}, loog: Loog::NULL) + assert_equal(list.uniq.size, list.size, "duplicates found in #{list.inspect}") + assert_includes(list, 'yegor256/factbase') + end + def test_mask_to_regex_treats_dot_as_literal re = Fbe.mask_to_regex('zold-io/blog.zold.io') assert_match(re, 'zold-io/blog.zold.io')